0

私はこれを作るための良い方法を約2週間探していたので、ただ尋ねるのは良い考えだと思いました。

私には2つのUser役割があります:editoradmin。を介して、すべてにsのeditor範囲がRegion割り当てられてい$hasAndBelongsToManyます。

アプリには、モデルもあります。Event各モデルにはRegion、を介してがありregion_idます。私は、すべての人が自分の割り当てに含まれているeditorものだけを表示、編集、削除、およびその他のことを実行できるようにしたいと思います。もちろん、ユーザーは何でも編集できます。EventRegionadmin

CakePHPモデルとコントローラーでこれを最小限の手間で実装するにはどうすればよいですか?

4

1 に答える 1

1

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イベントのビューに戻されます。

于 2013-01-09T19:06:52.000 に答える