【问题标题】:Cancan user update self if not admin?如果不是管理员,可以用户更新自我吗?
【发布时间】:2013-05-28 07:26:32
【问题描述】:

我在 cancan 不允许用户更新他们自己的数据时遇到问题。

我正在使用具有以下代码的标准设计用户控制器来检查是否允许使用以下代码进行更新:

def update
    authorize! :update, @user, :message => 'Not authorized as an administrator.'
    @user = User.find(params[:id])
    if @user.update_attributes(params[:user])
      self.update_districts
      self.update_property_types
      redirect_to users_path, :notice => "User updated."
    else
      redirect_to users_path, :alert => "Unable to update user."
    end
end

这是我修改后的 cancan 能力代码,允许用户在不是管理员的情况下更新自己的模型。

    user ||= User.new # guest user (not logged in)
    if user.has_role? :admin
      can :manage, :all
    else
      can :manage, User, :id => user.id
    end

任何想法为什么不允许我更新自己的用户数据?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 devise cancan


    【解决方案1】:

    这两行你做错了!

    authorize! :update, @user, :message => 'Not authorized as an administrator.'
    @user = User.find(params[:id])
    

    authorize! 行中,@user 只是nil,所以它变得不安。切换它们,它应该可以工作。即

    @user = User.find(params[:id])
    authorize! :update, @user, :message => 'Not authorized as an administrator.'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多