簡體   English   中英

CanCan嵌套資源控制器授權

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM