У меня есть модель «события», которая содержит свои собственные данные + идентификатор пользователя. Как предоставить доступ только пользователю, которому принадлежит событие?CakePHP разрешает, лишает доступ с использованием Auth
0
A
ответ
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.
*/
}
хорошая работа, не поможет –
Это был прекрасный ответ! Может ли компонент Auth возвращать только идентификатор или любое поле пользователя? Я хотел бы разрешить пользователю, чья роль является администратором, также просматривать все события? –
@JohhnyP Вы можете получить доступ к любой информации аутентифицированного пользователя, которая хранится в вашей таблице 'users', поэтому, если роль установлена в' role_id', просто установите флажок '$ this-> Auth-> User ('role_id')' для соответствия идентификатору роли администратора. – Oldskool