使用CakePHP 2.0的ACL我創建了2個組。一個是管理員,一個是訪問者。現在管理員可以添加和上傳圖片,訪問者可以查看圖片,如果他們點擊添加或刪除,它不會讓他們做任何事情。爲訪客羣組移除這些鏈接的最佳方法是什麼?如果我使用if/else語句來檢查它們屬於哪個組,那是否是最好的解決方案?CakePHP ACL爲不同的組生成不同的鏈接
0
A
回答
1
要隱藏導致用戶無權執行的操作的鏈接,視圖必須以某種方式知道用戶權限。 您可以通過檢查用戶所屬的組來檢查這些權限,但這意味着您不再依賴ACL權限。因此,任何ACL權限更新都必須在代碼中報告。不太方便。
那還有什麼?一種方法是在控制器中檢查用戶權限(通常在登錄時),然後在會話中保留這些權限。 然後可以在視圖中檢查會話中的權限以隱藏或顯示視圖的某些部分。你可以找到這種方法的一個例子:here:
但是對於特定的鏈接,你可以走得更遠,避免寫視圖中的測試。我personnaly使用從HtmlHelper繼承並重寫link()方法的助手。 基本上它的工作原理是相同的:在override的link()方法中,檢查目標操作的權限並且幫助程序返回鏈接,或者如果用戶不被允許訪問目標操作,則返回任何內容。
如果您想嘗試一下我的代碼,你可以用我的Acl plugin
在你的AppController,設置權限:
var $components = array(..., 'Acl.AclManager');
function beforeFilter()
{
...
//you can put it here as the permissions check is performed only once per session
$this->AclManager->set_session_permissions();
...
}
而在你的意見,使用AclHtmlHelper
$this->AclHtml->link(...);
該方法的基本原則是:在登錄時檢查所有權限。如果您的應用程序中有很多操作,則會顯着降低登錄速度。
更有效的方法可能是僅在需要時檢查每個操作的用戶權限,這意味着何時調用link()方法。但是這意味着幫手必須自己檢查Acl許可,這會以某種方式破壞MVC模型。在覈心庫中,Acl檢查與組件高度耦合。
相關問題
- 1. 從不同的來源生成鏈接
- 2. 生成不同的鏈接每個ID
- 3. 與Branch.io生成不同設備上的相同鏈接
- 4. MVC ActionLink生成不同類型的鏈接...爲什麼?
- 5. 軌道載波鏈接生成不同於S3存儲鏈接
- 6. 如何爲不同的鏈接分配不同的鏈接頁面?
- 7. 生成不同的組合PHP
- 8. 鏈接不生成
- 9. 爲不同的語言生成不同的docpad集合
- 10. 二維碼生成不同的鏈接2個參數(img!= href)
- 11. 鏈接器生成不同的代碼(objdump)
- 12. jquery鏈接在不同的鏈接
- 13. gcc鏈接不同的g ++
- 14. 爲不同分行生成不同的自動編號
- 15. JSF portlet爲不同環境生成不同的ID
- 16. 爲什麼生成的查詢不同?
- 17. Keypress和Keydown生成不同的行爲
- 18. 我不能鏈接工具鏈,以不同的github組織
- 19. 相同的C++代碼,不同的鏈接選項導致不同的行爲?
- 20. 生成不同的內容
- 21. 生成不同的顏色
- 22. 鏈接模型共同的hasMany CakePHP的
- 23. CakePhp href鏈接到不同的控制器的視圖
- 24. 生成不同ID的相同實體
- 25. CakePHP - 如何將html css helper鏈接到不同的文件夾
- 26. CakePHP - 使用菜單動態生成不同的頁面/視圖
- 27. 爲R類中的相同資源生成不同的ID
- 28. Weka總是爲不同的數據生成相同的簇
- 29. 休眠模式生成:相同的配置,不同的行爲
- 30. Bcrypt爲相同的輸入生成不同的哈希值?
如果我有很多控制器(大約100個),它會影響性能嗎?每個控制器有5個或更多的方法? – Saanch
@gvLearner正如我所說,它會影響登錄時間,因爲只要用戶通過身份驗證,就會檢查權限。在你的情況下,AclComponent-> check()方法在登錄時會被調用大約500次。這顯然是一個缺點。但是,一旦登錄完成,它幾乎不會影響性能(只有少數幾次調用「路由器」方法來比較操作鏈接和會話中的權限)。 – nIcO