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