所以我決定嘗試pundit用戶授權解決方案。我不知道如何使用policy
幫手圖,其中一個實例變量可能是零,如下面的簡單情況:在沒有實例變量的情況下使用Pundit中的策略助手
應用程序/視圖/項目/ index.html.slim
h1 Projects
(...)
- if policy(@project).create?
= link_to 'New Project', new_project_path
應用程序/控制器/projects_controller.rb
(...)
def index
@projects = Project.all
end
(...)
應用程序/政策/ project_policy.rb
class ProjectPolicy < Struct.new(:user, :project)
def create?
user.has_role? :admin
end
我想說明的項目#索引頁面中的「新建項目」鏈接,但我沒有可用@project實例變量的這種觀點,得到一個錯誤:
Pundit::NotDefinedError in Projects#index
unable to find policy NilClassPolicy for
錯誤出現顯然是因爲我做的通過@project
實例變量是零,因此有一個NilClass,這顯然我沒有必要授權。
我發現2種解決方法,此問題使其正常運行,但他們都不似乎是適當的:
視圖- 利用現有@projects變量,即:
policy(@projects[0])
- 加一行到項目#index控制器操作,定義這個實例變量,例如。
@project = Project.new
(或直接在視圖類似於以上:policy(Project.new)
)
首先溶液將導致在@projects陣列相同的錯誤將是空的,而第二個冗餘創建實例變量。所有的政策幫手需要知道的是我想要強制執行授權邏輯的類。
任何建議,以正確的方式來實現它?
完美,非常感謝! – CloudRide