2011-01-20 2 views
5

Я изменяю некоторые из своих пользовательских действий CanCan в классе Ability, чтобы использовать блоки вместо хэша, но теперь они фактически перестали ограничивать доступ. Странно, что встроенные действия вроде: manage and: create и т. Д., Похоже, все еще работают нормально с блоками.Пользовательские действия CanCan, не работающие с блоками

Это один пример:

OLD

# this one works 
can :share, Project, :user_id => user.id 

NEW

# this one doesn't work 
can :share, Project do |project| 
    project.users.exists?(user) 
end 

Любой столкнуться с этой проблемой раньше?

ответ

1

Я не могу сказать много о вашем нежелательном поведении, но вы, вероятно, не должны менять хэши, чтобы блокировать, так как эти хэши дают вам возможность получать записи. Прочитано this article тщательно в вики CanCan.

+0

Поверьте мне, я не хочу использовать блоки, но это похоже на единственный способ сделать это в моем случае. Я перешел от отношений «один ко многим» между «Проекты» и «Пользователи» ко многим-многим, поэтому теперь мне нужно проверить всех пользователей проекта, а не только одного. – Matt

+0

Хмм, попробуйте использовать отладчик и посмотрите, что происходит в CanCan при проверке возможностей. Или откройте и отредактируйте файлы cancan gem в вашей файловой системе и посмотрите, что передается с помощью демпинговых переменных. Вот как я остаюсь на пути, когда я не могу думать ни о чем другом. Конечно, верните файлы назад;) – Mirko

Смежные вопросы