edit
のメソッドの最初の数行でこれを処理できますEventsController
。イベントの地域を見つけて、ログインしている編集者がその地域の編集者であるかどうかを確認します。ユーザーがログインしたときに、そのロールが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
イベントのビューに戻されます。