我完全徹底失去了如何做到這一點。我有3個不同的角色:管理員,員工和捐助者。我的問題是,如果未經授權的用戶嘗試訪問來自URL的操作,那麼它確實會讓人感到困惑(對我來說),並具有權限以及適當的重定向。cakePHP-角色授權和路由
在我UsersController我有下列行爲
- admin_index
- admin_add
- admin_edit
- admin_view
- admin_delete
不帶前綴的行動
- 登錄
- 註銷
- 視圖
- 添加
- 編輯
管理員應允許訪問所有管理前綴的行動以及登錄和註銷,而工作人員並且捐助者 應該只能訪問後者5.還要注意,所有用戶都使用相同的登錄表單。
在我AppControlles的組成部分,我有以下:
'Auth' => array(
'loginRedirect' => array(
'controller' => 'donors',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'users',
'action' => 'login'
),
'authorize' => array('Controller')
)
然而,在我的登錄操作我檢查用戶角色相應地更改loginRedirect:
if($this->request->is('post')){
if($this->Auth->login()){
switch($this->Auth->user('role')){
case 'admin':
$this->Auth->loginRedirect = array('controller'=>'users','action'=>'admin_index','prefix'=>'admin','admin'=>true);
break;
case 'donor':
...
break;
case .....
}
}
}
問題1 現在,如果具有捐助者角色的當前用戶登錄並嘗試訪問localhost/sitename/admin/users/add
,那麼他將被重定向到admin/donors
而不僅僅是/donors
。那麼我怎樣才能刪除管理員前綴?
問題2 此外,我不完全理解藿$這個 - > Auth->允許()的作品。如果在我donorsController我想控制訪問根據角色控制器動作,我該怎麼辦它?例如,如果在我的donorsController中有'刪除'操作,我將如何允許員工用戶同時拒絕授權用戶訪問刪除操作。我相信beforeFilter是解決方案,但無法找到如何去做!任何指針? 謝謝
你應該總是提到你正在使用的確切cakephp版本。提示:不要在這裏創建巨大的控制器代碼開銷,而應該使用簡單的/登錄表單和[Tiny](http://www.dereuromark.de/2011/12/18/tinyauth-the-fastest-和-easy-authorization-for-cake2 /)作爲Auth方法。通過這種方式,每個動作都被明確定義,並且在沒有訪問權限的情況下,所有動作都將重定向到/登錄爲中央登錄表單。 – mark
感謝您的答覆!我瀏覽了你的博客,看起來很乾淨。但是我沒有這個設置,因爲這些角色在用戶的表中被定義爲一個字段,而不是一個模型。此外,我仍然有理解$ this-> Auth-allow()的工作原理,以及我希望能夠使用我已有的設置來恢復的問題。謝謝! – LogixMaster
只是用戶表字段的作品,以及。閱讀文檔。不一定是模特。 – mark