好的,我會在前言中說我是蛋糕和ACL以及MVC體系結構的小菜鳥。我正在從它的網站http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two.html繼續一個cakephp教程。我理解本教程的內容,但想知道將這個簡單的基於組的ACL帶到下一個級別的最簡單方法。我已經搜索到無濟於事。所以,在這個問題上。例如,讓我們在上面的教程中稍微修改一下該函數的版本。它只是爲ACO設置ARO權限。在cakephp中限制aro範圍
有許多地區和許多部門,每個部門都有很多用戶。
關係如下: 一個地區有許多部門 - 一對多。 一個地區有很多用戶,用戶可能有很多地區(只要他們屬於該地區的一個部門)。 部門擁有許多用戶,包括許多用戶。
public function initDB() {
$group = $this->User->Group;
//Allow admins to everything
$group->id = 1;
$this->Acl->allow($group, 'controllers');
// issue 1) allow district managers to districts, departments, users
$group->id = 2;
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Districts');
$this->Acl->allow($group, 'controllers/Departments');
$this->Acl->allow($group, 'controllers/Users');
//issue 2) allow department managers to edit departments and users
$group->id = 3;
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Departments');
$this->Acl->allow($group, 'controllers/Users');
//we add an exit to avoid an ugly "missing views" error message
echo "all done";
exit;
}
好了,這些權限被設置,但它絕對是方便,真正解決問題的一小部分。就目前而言,我只是阻止部門管理人員執行區級功能。地區管理員和部門管理員都可以不受限制地執行用戶CRUD
我想要做的是將每個管理員類型USER CRUD的範圍限制爲僅駐留在其部門或地區內的用戶。例如,Department Admin Foo無法刪除其他部門管理員的用戶,並且Dist Admin Bar不能將所有其他Dist管理員的用戶名改爲nancy。
大聲笑。我對如何完成這件事感到非常茫然。
我想一種方法會得到一個管理員的排名,例如dist管理員,然後找出他是哪個地區的用戶。最後,將該分區中的所有用戶都歸入變量$ userScope。再一次,我是蛋糕PHP的新手,並不確定如何執行這個提議,即使這是一個好主意並且是處理這個問題的最好方法。有什麼建議麼??提前致謝!!!
編輯:有用答案,@nicolae。然而,它似乎仍然可以編寫一個函數,返回所有給定的管理員(任何給定的aco)允許編輯的所有用戶。對我來說似乎是這樣,因爲我假設管理員,他/她自己是返回的用戶羣的一部分。例如,dist 9的dist管理員駐留在dist 9;同樣,DEPT 1的部門管理員,駐留在部門1.
could i write something like:
public getUserScope(){
$id = $this->Auth->user('id');
$dept = $this...
$dist = $this...
$access_level = $this->Session->read('Auth.User.group_id');
if($access_level == 3){
//get all users in this user's dept
} elseif($access_level == 2) {
//find all users in this user's dist
} elseif($access_level == 1) {
//find all users
}
}
哎喲。授予所有將這些信息彙總在一起的連接表,在實際打印時,這看起來像medusas頭髮。你能看到我的邏輯線嗎?這對我來說有點難以表達。讓我知道我是否應該進一步澄清。
@Todd所以我進一步在回答您的編輯我的答案。請檢查以上。 – NicolaeS 2013-03-12 15:48:16