我試圖更好地理解CanCan在授權方面的功能。想象一下這樣的控制器操作:可在CanCan中執行多個操作授權
def update
if can? :action, Model or can? :resolve, Model or can? :authorize, AnotherModel
# My Code here
respond_with @model
else
raise CanCan::AccessDenied.new(nil, :update, Model)
end
end
我得到了這一點,同時試圖找到上述使用authorize!
到一個解決方案。至於我可以看到(也看簽名)authorize!
只接受一個許可(動作)和一個主題,一個可選的消息,像這樣:
def authorize!(action, subject, *args)
# code
end
有沒有我可以俯瞰的方式指示授權檢查多個操作?把兩個授權一個接一個地作爲AND
條件之間的權限,我想它是像OR
條件工作,基本上類似於上面的自定義代碼(這有問題在CanCan中提高AuthorizationNotPerformed
,可以避免與這不是我真正想做的事情)。
好的,但是你可以用循環和能力文件中的一些條件(使用自定義動作)構建相同的東西。而且你可以重複使用這些自定義操作,從而產生更簡潔的代碼庫。那麼無論你爲什麼工作;) – spas