Я полностью и полностью потерял, как это сделать. У меня есть три разные роли: Admin, Staff и Donors. Моя проблема в том, что она действительно запутывает (для меня в любом случае) с разрешениями и, как и соответствующие перенаправления, если неавторизованный пользователь пытается получить доступ к действию из URL-адреса.cakePHP- Роль авторизации и маршрутизации
В моей UsersController у меня есть следующие действия
- admin_index
- admin_add
- admin_edit
- admin_view
- admin_delete
не-приставкой действия
- Войти
- выход из системы
- вид
- добавить
- редактировать
Администратор должен иметь возможность получить доступ ко всем админ-приставкой действия, а также входа в систему и выход из системы, в то время как персонал и донор должен иметь доступ только к последним 5. Также обратите внимание, что все пользователи используют одну и ту же форму для входа.
В компоненте моих AppControlles, я бы следующее:
'Auth' => array(
'loginRedirect' => array(
'controller' => 'donors',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'users',
'action' => 'login'
),
'authorize' => array('Controller')
)
Однако, на мой логин действия проверяю для роли пользователя, чтобы изменить loginRedirect соответственно:
if($this->request->is('post')){
if($this->Auth->login()){
switch($this->Auth->user('role')){
case 'admin':
$this->Auth->loginRedirect = array('controller'=>'users','action'=>'admin_index','prefix'=>'admin','admin'=>true);
break;
case 'donor':
...
break;
case .....
}
}
}
Вопрос 1 Теперь, если текущий пользователь с ролью донора вошел в систему и пытается получить доступ к localhost/sitename/admin/users/add
, он перенаправляется на admin/donors
, а не только /donors
. Итак, как я могу удалить префикс администратора?
Вопрос 2 Также я не полностью понимаю hwo $ this-> Auth-> allow(), работает. Если в моем donorsController я хочу контролировать доступ к действиям контроллеров в соответствии с ролями, как я могу это сделать Это? Так, например, если в моем donorsController есть действие «удалить», как я смогу разрешить пользователю штата, а также лишить пользователя-донора доступа к действию удаления. Я считаю, что beforeFilter - это решение, но не может найти, как это сделать! Любые указатели? Thanks
Вы всегда должны указать точную версию cakephp, которую используете. Совет. Вместо того, чтобы создавать избыточный код контроллера, здесь может возникнуть смысл использовать простую форму для входа в систему и [Tiny] (http://www.dereuromark.de/2011/12/18/tinyauth-the-fastest- и-easiest-authorization-for-cake2 /) в качестве подхода Auth. Таким образом, каждое действие четко определено, и в случае отсутствия доступа все действия будут перенаправлены на/login в качестве центральной формы входа. – mark
Спасибо за ваш знак ответа! Я прошел через ваш блог и выглядел чистым. Однако у меня нет такой настройки, поскольку роли определяются в пользовательской таблице как поле, а не модель. Также у меня все еще есть проблемы с пониманием того, как работает $ this-> Auth-allow(), так как я надеялся, что смогу возобновить работу с настройкой, которую у меня есть. Благодаря! – LogixMaster
Работает только поле таблицы пользователей. Прочтите документы для него. Не обязательно быть моделью. – mark