2013-01-17 54 views
2

我仍然在蛋糕一個新手。 假設你有一個有GROUP_ID和一張桌子稱爲組 組一表的用戶:isAuthorized()和CakePHP中使用Acl組件有什麼區別?

  • ID角色
  • 1管理員
  • 2教師
  • 3學生

我米納悶,是什麼例如之間的差異,使用isAuthorized功能授權用戶訪問特定的動作,並使用ACL來限制他的訪問之間?一種方法比另一種更安全嗎?

另外,我想知道是否有任何「Cakish」的方式,例如: - 允許管理員訪問編輯動作 - 允許學生訪問編輯動作,而是從改變某一領域限制他。

例如,假設一個學生正在編輯它具有以下字段的表用戶:用戶名,密碼,GROUP_ID。他可以編輯密碼,但不能編輯group_id和用戶名。而管理員可以同時編輯。我實現這個的方式是在控制器內部檢查用戶發佈後的group_id,並根據他的權限取消設置字段用戶名和group_id。這是否是一個適當的方式來實現這一點?

謝謝。

回答

1

ACL(或訪問控制列表)是分離誰擁有從您的代碼訪問什麼邏輯的方法。使用isAuthorized(),您必須爲每種可能的訪問類型手動添加代碼。此外,ACL允許(遞歸)分組和類矩陣訪問(如「允許訪問所有戰士但不是種族Gremlin」); CakePHP的文檔相當廣泛。

但是,我個人發現在Cake的ACL中缺少的是限制訪問特定的項目。例如,學生可以查看他的成績,但不能看到其他學生;即他可以呼叫/ results/view/10,/ results/view/49和/ results/view/87而不是其他人。我無法通過ACL來做到這一點。

至於編輯:它通常是一個壞主意,以顯示/後的所有數據,然後刪除你認爲不必要。你有一天會忘記一個領域,然後你有一個錯誤或漏洞。我建議使用安全組件來防止表單篡改,然後只根據訪問級別將這些字段添加到用戶可以編輯的表單中。

CakePHP文檔告訴您手動添加要保存在控制器的POST操作中的字段,但這意味着您必須在2個位置維護字段列表:在您的視圖中使用表單和在控制器。根據訪問級別添加代碼以包含/排除字段,並且您有一個保養頭疼的問題。通過安全防篡改,用戶無法手動添加字段來操作POST數據。

+0

感謝@JvO這是非常有幫助! – KEOKI

相關問題