CakePHP ACL без префиксных методов - PullRequest
0 голосов
/ 13 декабря 2011

При разработке приложений в CakePHP я пришел к выводу, что существует много избыточных данных при использовании префиксов, таких как admin, модератор и т. Д.

Когда немного погуглил, я нашел ответ от zuha-3 http://cakephp.1045679.n5.nabble.com/Going-back-to-school-ACL-td4941972.html#a4949876

В нашем приложении мы сохраняем префиксную маршрутизацию, но избавляемся от метода маршрутизации.Таким образом, мы все еще получаем $this->params->params['prefix'], но направляем пользователя к методу index() вместо метода admin_index().Затем мы полностью оставляем ACL решать, имеет ли ваша роль доступ к функции индекса.Это позволяет нам избавиться от 50% файлов просмотра и 50% методов контроллера.

Мы можем иметь разные представления для разных пользовательских ролей, поскольку мы назначаем префиксы представлений для пользовательских ролей.Таким образом, мы можем иметь представление администратора, и все пользователи в роли администратора будут видеть /Posts/View/Posts/admin/index.ctp вместо /Posts/View/Posts/index.ctp, если и только если представление администратора существует,Мы можем сделать то же самое для менеджеров, пользователей и т. Д. И предоставить каждому приложению возможность решать, будут ли менеджеры видеть представление администратора, представление менеджера или гостевое представление.

Так что этоубрать много лишних методов.

Есть ли у кого-нибудь какая-либо последующая статья в этой статье или полезная информация о том, как это сделать.

1 Ответ

0 голосов
/ 13 декабря 2011

Вы должны иметь возможность просто создавать маршруты, подобные этому:

Router::connect('/admin/users/index', array('admin' => false, 'controller' => 'users', 'action' => 'index'));

И тогда вам понадобится представление index.ctp, а не admin_index.ctp.Но я не совсем уверен, почему это добавит что-то в ваше приложение.Представления администратора обычно имеют свою особую функцию (например, предоставление доступа к добавлению / удалению пользователей после того, как разрешение пользователя на это было проверено), и поэтому они должны быть отделены от «обычных» представлений.(В противном случае вы получите очень грязные представления с логикой проверки администратора, которая на самом деле не является частью приложения MVC, этот материал принадлежит контроллеру.)

РЕДАКТИРОВАТЬ: В соответствии с вашимкомментарий ниже, я бы просто сделал представление администратора из вашего метода мода и установил некоторые флаги, чтобы определить, что они могут и не могут делать / видеть.Например:

function mod_index() {
    $this->set('can_edit_users', 1);
    $this->set('can_delete_users', 0);

    // User admin_index view, rather then looking for mod_index view
    $this->render('admin_index');
}

А затем в ваших представлениях добавьте простые проверки, чтобы определить, какие ссылки / информацию они могут и не могут видеть.

...