Я использую CakePHP в своем проекте, и я ищу подходящий способ проверить расширенные права пользователей в моих представлениях.CakePHP: Проверить авторизацию во взглядах
У меня есть несколько страниц, в которых содержание зависит от ваших прав (вы можете просматривать некоторые блоки или нет, изменить некоторые Infos или нет, и т.д. ...)
Я искал и единственный способ, которым я нашел это реализовать Auth Helper, но я подумал, что лучший способ - реализовать методы в моем «UserController» (например, canPerformAction ($ action, $ controller = 'default_controller)), я ошибаюсь? И если я прав, как правильно назвать эти методы?
Спасибо.
EDIT: Других уточнений
Например, у меня есть действие «editEventProducts», что пользователь может выполнять только тогда, когда он является владельцем события и если статус события < = 2.
проверить что в моем контроллере функция isAuthorized работает как шарм.
Но у меня есть страница под названием «eventDetails», форма которой вы можете выполнять несколько действий, таких как этот, и я хочу показать кнопку редактирования, только если вы можете это сделать.
Если факт, что мне нужно, является результатом функции «isAuthorized» для каждого действия, которое вы можете вызвать, но могу ли я правильно его получить из представления?
Решение
Я реализовал помощник Auth, который делает несколько проверки таких, как этот, который, наконец, белый список проверки, в зависимости от состояния моего мероприятия, надеюсь, что это поможет, код:
App::uses('AppHelper', 'View/Helper');
class AuthHelper extends AppHelper {
var $helpers = array('Session');
private $_whitelist = array(
'controller1' => array(
'events' => array(
'action1' => array(1 => true, 2 => true),
'action2' => array(1 => true, 2 => true),
'action3' => array(3 => true),
'action4' => array(6 => true)
)
),
'user' => array(
'controller1' => array(
'action1' => array(1 => true, 2 => true),
'action2' => array(1 => true, 2 => true)
)
)
);
public function canPerformAction ($action, $event_infos, $controller = 'events') {
return isset($this->_whitelist[$this->Session->read('Auth.User.role')][$controller][$action][$event_infos['Event']['state_id']]);
}
}
Как эти права сохраняются в настоящее время? Это важно для правильного ответа. Это таблица «user_rights»? – mark
В настоящее время это делается в canEditEvent, canAddProducts, isAdmin серии функций, которые я вызываю в своем контроллере, а затем отправляю на просмотр. Но я действительно думал об помощнике Auth, с правами таблицы и функцией, возвращающей соответствующие true/false и false, если они не найдены в таблице. Но я хотел бы знать, если это лучший способ сделать это, в идее MVC. – nicolecoco02