2013-02-13 2 views

ответ

3

Вы можете просто добавить проверку в начале вашего метода просмотра, чтобы узнать, совпадает ли идентификатор пользователя с идентификатором пользователя с идентификатором события. Если нет, перенаправите их обратно с помощью флеш-сообщения «отказано в доступе». Например, в вашем EventController добавьте:

public function view($event_id) { 
    // Make sure the event exists at all 
    if (!$this->Event->exists($event_id)) { 
     throw new NotFoundException(__('No such event.')); 
    } 

    // Get the event data 
    $event = $this->Event->findById($event_id); 

    // Match the authenticated user with the user_id of the event. 
    if ($this->Auth->User('id') != $event['Event']['user_id']) { 
     // No match, redirect the user back to the index action. 
     $this->Session->setFlash(__('This is not your event!')); 
     $this->redirect(array('action' => 'index')); 
    } 

    /** 
    * If this point is reached, the user is the owner of the event. 
    * The rest of your logic goes below this point. 
    */ 
} 
+0

хорошая работа, не поможет –

+0

Это был прекрасный ответ! Может ли компонент Auth возвращать только идентификатор или любое поле пользователя? Я хотел бы разрешить пользователю, чья роль является администратором, также просматривать все события? –

+0

@JohhnyP Вы можете получить доступ к любой информации аутентифицированного пользователя, которая хранится в вашей таблице 'users', поэтому, если роль установлена ​​в' role_id', просто установите флажок '$ this-> Auth-> User ('role_id')' для соответствия идентификатору роли администратора. – Oldskool