2013-05-28 22 views
2

我無法讓用戶更新自己的數據。如果不是管理員,康康用戶會更新自己嗎?

我使用它具有以下代碼的標準色器件用戶控制器檢查,如果更新被允許用下面的代碼:

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 

,這裏是我的修改康康舞能力代碼,允許用戶更新他們自己的模式,如果他們不是管理員。

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

您正在以錯誤的順序完成這2行!

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.'