在我的應用程序中,允許用戶指定另一個用戶作爲他們的「客戶經理」,並允許客戶經理修改所有用戶信息。我定義了以下能力:CanCan嵌套資源控制器授權
can :manage, User do |user|
user == current_user or user.account_manager == current_user
end
用戶也有一些嵌套的資源(例如:出版物)。我定義瞭如下能力:我請用以下的
can :manage, Publication do |publication, user|
publication.user == current_user or user == current_user or user.account_manager == current_user
end
在訪問量:
can? :update, @publication, @user_we_are_accessing
can? :create, Publication.new, @user_we_are_accessing
。
到目前爲止,一切正常。我的問題是與控制器。在我PublicationsController我說:
load_and_authorize_resource :user
load_and_authorize_resource :publication, :through => :user
然而,這總是拋出存取遭拒,因爲出版了檢查未通過的用戶對象的能力(試圖檢查用戶對象的能力,顯示爲零)。
任何想法我可以去實現這個?
tl; dr:使用CanCan授權訪問資源。用戶可以分配另一個用戶作爲客戶經理。用戶擁有嵌套的資源。問題:客戶經理無法訪問嵌套資源。
1)代替load_and_authorize_resource :publication
只加載資源load_resource :publication
2)增加了一個before_filter :authorize
具有以下implementaiton的load_resource調用後:
def authorize
raise CanCan::AccessDenied unless can? :manage, @publication, @user
end
這