2017-01-05 18 views
1

我有一個DirectoryController,並 - 故意 - 沒有UsersController。當我創建管理控件時,UsersController無疑會被添加,並且將具有完全不同的範圍&的用途。如何讓權威人士將範圍應用於名稱與策略不同的模型?

當我在目錄控制器中調用policy_scoped時,我想使用DirectoryPolicy中的作用域,而不是UserPolicy(尚不存在)。我想以verify_policy_scoped可識別的方式來執行此操作,這意味着DirectoryPolicy::Scope.new(current_user, User).resolve的顯而易見的工作不僅僅只是一點點時間,而且實際上也不起作用。 (這看起來像一個bug)這看起來像是一個明顯的疏忽,我確信有什麼地方可以做到這一點,我只是不知道該怎麼做。

我該如何在權威人士做到這一點?

+0

策略耦合到模型。所以你通常爲每個模型創建一個策略類。在你的情況下,現在創建一個'UserPolicy'類是不合適的。 – larsbe

回答

1

當你做到這一點

DirectoryPolicy::Scope.new(current_user, User).resolve 

你有效地繞過權威人士的policy_scoped?跟蹤。

我的第一個想法是,如果DirectoryPolicy::Scope用於確定用戶數據的範圍,那麼可能需要創建一個Directory模型,正如pundit所期望的那樣。當你在你的DirectoryController

@users = policy_scope(Directory) 

權威人士這樣的事情可以恰當地推斷出你想要的DirectoryPolicy::Scope,和你的resolve方法可以治療的scope彷彿這可能是因爲這

class Directory < User; end 

簡單現在由於繼承,它是User類。

如果您無法像我這裏描述的子類User那樣繼承子類,那麼您需要顯示應用中的一些實際代碼,並提供更多關於Directory是什麼以及您想要如何處理的內容。