如果不是管理员,Cancan用户更新自己?

时间:2013-05-28 07:26:33

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

我遇到了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

为什么这不允许我更新自己的用户数据?

1 个答案:

答案 0 :(得分: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.'
相关问题