[英]CanCan Nested Resource Controller Authorization
在我的應用程序中,允許用戶將另一個用戶指定為他們的“帳戶管理員”,並允許帳戶管理員修改所有用戶信息。 我定義了以下能力:
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
can? :create, Publication.new, @user_we_are_accessing
。
到目前為止一切正常。 我的問題在於控制器。 在我的PublicationsController中,我添加了:
load_and_authorize_resource :user
load_and_authorize_resource :publication, :through => :user
但是這總是拋出AccessDenied,因為發布檢查沒有將用戶對象傳遞給該功能(嘗試檢查功能中的用戶對象顯示為nil)。
我有什么想法可以實現這個?
tl; dr:使用CanCan授權訪問資源。 用戶可以將另一個用戶指定為客戶經理。 用戶擁有嵌套資源。 問題:帳戶管理員無法訪問嵌套資源。
我通過以下方式解決了這個問題:
1)替換load_and_authorize_resource :publication
剛剛加載資源load_resource :publication
2)使用以下實現在load_resource調用之后添加了一個before_filter :authorize
:
def authorize
raise CanCan::AccessDenied unless can? :manage, @publication, @user
end
這是有效的,但我希望有一種方法能夠以設計的方式解決這個問題,如果有這樣的話。 感謝您的想法和反饋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.