2011-04-03 168 views
3

在我的應用程序中,允許用戶指定另一個用戶作爲他們的「客戶經理」,並允許客戶經理修改所有用戶信息。我定義了以下能力: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 

回答

1

我通過以下操作解決了這個作品,但我希望有一種方法能夠以設計的方式解決這個問題,如果有這樣的事情。感謝和反饋。