Разрешения на основе группы cakephp

92
13

Я хотел бы иметь ограничения на основе групп, которые позволят пользователям получать доступ только к определенным частям сети. Я новичок во всех материалах ACL, и я не совсем понял это из руководства:/поэтому я хотел бы задать несколько вопросов.


Но перед любыми вопросами мои маршруты выглядят так:


Router::connect('/', array('controller' => 'users', 'action' => 'login'));
Router::connect('/admin/:controller/:action/*', array('prefix' => 'admin', 'admin' => true));
Router::connect('/registered/:controller/:action/*', array('prefix' => 'registered', 'registered' => true));

1.) Как ограничить пользователей из любой другой группы, чем Administrator, чтобы получить ТОЛЬКО часть /registered/ веб-страницы


2.) Как я могу запретить кому-либо использовать адреса по умолчанию, такие как www.example.com/users/add в глобальном масштабе (я хочу только тип адресов www.example.com/admin/users/add или www.example.com/registered/users/add)? Такие адреса не являются событиями, установленными в routes.php, но они все еще работают.


Любые ответы оценены

спросил(а) 2021-01-19T12:32:02+03:00 9 месяцев назад
1
Решение
92

Во-первых, это торт 1.3 или 1.2?
В 1.3 используется префиксная маршрутизация. Вы можете настроить несколько префиксов, например, прямо сейчас я разрабатываю сайт, который требует администратора с помощью admin/controller/action, а также ограничиваю некоторые области только зарегистрированными пользователями... например, /users/controller/action.


Это относительно легко сделать, первым шагом является установка префиксов в вашем core.php:


Configure::write('Routing.prefixes', array('admin', 'registered'));

Здесь задокументировано:
http://book.cakephp.org/view/950/Prefix-Routing

Компонент Auth может позаботиться обо всем остальном здесь, вы можете использовать ACL и так далее, но я не смотрел далеко в это, потому что он кажется сложным для вещей, которые я создаю на данный момент.


Учебник, который я нашел полезным, был учебником по компоненту Andrew Perkins по youtube, когда я учился, как это сделать.
youtube.com/watch?v=FjXAnizmR94


Есть 3 части, и он хорошо объясняет.


Удачи!

ответил(а) 2021-01-19T12:32:02+03:00 9 месяцев назад
65

Хорошо, так это рабочее разрешение. (/app/app_controller.php)

function beforeFilter() {               
if ((isset($this->params['admin']))) {
$admin_grp = $this->UserGroup->find('first', array(
'conditions' => array(
'UserGroup.name' => 'Administrator')));
if ($this->Auth->user('user_group_id') != $admin_grp['UserGroup']['id']) {
$this->Session->setFlash(__('Access denied.', true));
$this->redirect("/registered");
} else {
$this->layout = 'admin';
}
} else if (isset($this->params['registered'])) {
if (!$this->Auth->user()) {
$this->Session->setFlash(__('Access denied. You need to login first.', true));
$this->redirect("/users/login");
}
$this->layout = 'registered';
} else {
$this->layout = 'default';
}
}

ответил(а) 2021-01-19T12:32:02+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема