您可以在EventsController
的edit
方法的前幾行處理此操作。查找事件的區域,然後檢查登錄的編輯器是否爲該區域的編輯器。所有你需要做的就是確保當用戶登錄時,他/她的角色被保存在AuthComponent
的會話中。例如:
public function edit($event_id = null) {
if($this->Auth->user('role') == "editor") {
// User is logged in as editor, check if the Event region matches his regions.
$event = $this->Event->findById($event_id); // Get the event
$user = $this->Event->User->findById($this->Auth->user('id')); // Get the user (Assuming an Event belongsTo user, otherwise you'll have to load the model first).
if(!array_search($event['Event']['region_id'], $user['User']['Region'])) {
// The event's region wasn't found in the Regions for the User, deny access
$this->Session->setFlash(__('You are not authorized to edit this event.'));
$this->redirect(array('action' => 'view', $event_id));
}
}
}
所以基本上你做任何邏輯之前,您檢查用戶是否是一個編輯器,如果是這樣,如果該地區他的關聯匹配的地區爲當前事件。如果它沒有設置閃光消息,並且用戶被踢回view
的事件視圖。
那麼根本就不需要ACL? 'isAuthorized'是什麼? – Lanbo
ACL僅用於確定經過身份驗證的用戶是否有權訪問控制器中的特定操作。在這種情況下,編輯者和管理員都可以訪問,如果他們被允許編輯特定事件,則只需要額外的檢查。 ACL不會檢查那種模型關係。 – Oldskool
謝謝澄清。 – Lanbo