2014-04-16 111 views
1

我正在使用CanCan on Rails 4(cancancan),我想只授權當前用戶訪問設置頁面。防止用戶訪問頁面,如果不是當前用戶

例如,用戶ID 1應該只是訪問/設置/ 1。用戶ID 1不應該能夠查看/設置/ 2或任何其他ID。

我的角色是:管理員,用戶,客人,禁止

Ability.rb:

include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user (not logged in) 
    if user.admin? 
     can :manage, :all 
    else 
     can :read, :all 
    end 
    end 
end 

用戶控制器:

def settings 
    @user = User.find(params[:id]) 
    end 
+0

您是否將'settings'定義爲路由中的資源?如果是的話,也許將其改爲資源將是一個很好的解決方案。我的意思是任何用戶只存在一個(自己)設置頁面。 – gotva

+0

到目前爲止,這有什麼好運氣? – zeantsoi

回答

2

從文檔上authorizing controller actions

# app/controllers/users_controller.rb 
def settings 
    @user = User.find(params[:id]) 
    authorize! :settings, @user 
end 

這假設您已經正確建立了您的訪問參數,如下所示:

# app/models/ability.rb 
can :settings, User do |u| 
    user.id == u.id 
end 
+0

謝謝你,這工作完美! –