CanCanCan Пользователь может редактировать свой профиль - PullRequest
0 голосов
/ 17 октября 2018

У меня тут действительно странная проблема.Вот строка, вызывающая все проблемы в моем ability.rb

    can [:edit, :update, :destroy], User, id: user.id

Когда я запускаю консоль rails, я получаю ожидаемое поведение:

u = User.last
a = Ability.new(u)
a.can?(:edit, u)
=> true
a.can?(:edit, User.first)
=> false

Однако, когда я запускаю веббраузер, войдите в систему как пользователь и попробуйте отредактировать еще один, CanCanCan хранит молчание.Если я заменю can на cannot, я не смогу редактировать ни одного пользователя.Это как если бы оно не выглядело как условие.

Мой UsersController получил эту строку сверху

authorize_resource

Я застрял с этим, любая помощь будет с удовольствием оценена.

cancancan 2.3.0
рельсы 5.2.1

1 Ответ

0 голосов
/ 17 октября 2018

Убедитесь, что ваш экземпляр (@user) загружен до запуска действия authorize_resource, в противном случае он проверит, может ли пользователь получить доступ к некоторым пользователям (can?(:edit, User), что всегда верно), вместо этоготочного пользователя.

before_action :load_user, except:[:index, :new, :create]
authorize_resource

...

private def load_user
  @user = User.accessible_by(current_ability, action_name.to_sym).find(params[:id])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...