Rails CanCan, сбой, если у меня нет Rails.logger.info --- почему? - PullRequest
0 голосов
/ 27 июля 2011

Если у меня есть это:

can [:manage], GroupMember do |group_member|
  wall_member.try(:user_id) == current_user.id
  Rails.logger.info 'XXXX'
end

CanCan работает правильно, но если я удаляю регистратор, он выходит из строя:

can [:manage], GroupMember do |group_member|
  wall_member.try(:user_id) == current_user.id
end

Есть идеи, что здесь происходит с CanCan?или мой код?:) спасибо

1 Ответ

4 голосов
/ 27 июля 2011

Из тонкой инструкции :

Если хеш условий не дает достаточного контроля над определением способностей, вы можете использовать блок вместе с любым кодом Ruby, который вам нужен.

can :update, Project do |project|
  project.groups.include?(user.group)
end

Если блок возвращает true, то у пользователя есть возможность обновления для этого проекта, в противном случае ему будет отказано в доступе. Недостатком использования блока является то, что его нельзя использовать для генерации условий для запросов к базе данных.

Ваш первый блок:

can [:manage], GroupMember do |group_member|
  wall_member.try(:user_id) == current_user.id
  Rails.logger.info 'XXXX'
end

Всегда будет возвращать истинное значение, потому что Rails.logger.info 'XXXX' возвращает "XXXX\n" (info - просто оболочка для add, и вы должны прочитать источник, чтобы увидеть, что add возвращает это не очень хорошо задокументировано). Без вызова Rails.logger.info блок возвращает только:

wall_member.try(:user_id) == current_user.id

и это должно быть ложно для вас.

...