CanCanCan用户编辑自己的个人资料



我在这里遇到了一个非常奇怪的问题。这是造成我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

我对此感到困惑,任何帮助将不胜感激。

康康 2.3.0
导轨 5.2.1

确保在操作运行authorize_resource之前加载您的实例 (@user(,否则它将检查用户是否可以访问某些用户(can?(:edit, User),这始终为 true(,而不是确切的用户。

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

最新更新