CanCanCan 用户编辑自己的个人资料
CanCanCan User edit his own profile
我遇到了一个非常奇怪的问题。这是在我的 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
rails5.2.1
确保在 authorize_resource
操作运行之前加载您的实例 (@user
),否则它将检查用户是否可以 访问某些用户 (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
我遇到了一个非常奇怪的问题。这是在我的 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
rails5.2.1
确保在 authorize_resource
操作运行之前加载您的实例 (@user
),否则它将检查用户是否可以 访问某些用户 (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