Представление Modifying на основе ACL в CakePHP

Я хочу смочь показать или скрыть определенные элементы в представлении на основе ACL. Например, если пользователь смотрит на мое представление Users/index, я не хочу показывать, 'Удаляют Пользователя' элемент, если у него нет разрешения удалить пользователей. Если у него действительно есть разрешение отредактировать пользователей, я действительно хочу показать 'Пользовательскую ссылку' Редактирования.

Я могу взломать это вместе, но быть очень в новинку для Пирога, я надеюсь, что существует изящное решение. Лучшее, которое я сделал, вовлекает логику хранения в два места, таким образом, это - ад для поддержания.

Спасибо!

6
задан Jay 19 July 2010 в 02:09
поделиться

2 ответа

Не существует универсального "элегантного решения" :) Я тоже всегда хотел сделать такое. В любом случае, как вы могли бы это сделать:

Перезаписать Html Helper в каталоге вашего приложения - сделать копию из /cake/libs/views/helpers/html.php в /app/views/helpers/html.php и внести некоторые изменения в функции Html :: link.

Например, вы можете проверить, содержит ли URL действие «редактировать» или «удалить».

Другая часть - передать правильные параметры от контроллера. В AppController :: beforeFilter вы можете прочитать права пользователя (лучше кэшировать) и передать их в специальной переменной Auth в View.

Таким образом, если у вас есть права на просмотр, вы можете легко изменить ссылку. :)

Как я уже сказал, я не делал этого на реальном примере, но я бы сделал это так.

В этом есть 1 плохой момент - если исходный помощник Html будет изменен, ваш помощник останется прежним. Но я считаю, что помощник Html достаточно зрел, поэтому для меня это не большая проблема.

1
ответ дан 17 December 2019 в 00:02
поделиться

Я делаю это так в app_controller.php, хотя с таким же успехом можно сделать это в конкретных контроллерах. Переменные представления $usersIndexAllowed и $configureAllowed затем используются в условных операторах в представлении.

function beforeRender()
{
    if($this->layout=='admin')
    {
        $usersIndexAllowed = $this->Acl->check($user,"users/index");
        $configureAllowed = $this->Acl->check($user,"siteAdmins/configure");
    }
    $this->set(compact('usersIndexAllowed','configureAllowed'));
}
1
ответ дан 17 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: