Режим действия ACL Cakephp против режима CRUD

Я изучаю функцию ACL в cakephp. Я прошел через документацию cakephp. Чтобы узнать больше, я проверил код / ​​базу данных некоторых плагинов ACL, таких как плагин ACL croogo и alaxos. Я вижу, что в таблице aros_acos есть такие столбцы, как _create, _read, _update и _delete. Из этих примеров (croogo / alaxos) для действия, например: - add (под контроллером пользователя), я вижу значение как 1 1 1 1 в столбцах _create, _read, _update и _delete. Как видно из названия, add должен отображаться только в _create (1 0 0 0), верно? Кроме того, в этом сценарии нам нужно 4 столбца?

Меня перепутали режим действий с режимом CRUD. В моем приложении есть некоторые функции, такие как одобрение, отклонение и т. Д., Кроме CRUD. Нужно ли мне добавлять столбцы для этих действий? Или для этого подойдут mapactions (в таком случае мне нужно отображать все действия в контроллере)? Кроме того, в моем приложении мне нужно предоставить владельцу права на редактирование и удаление. Как лучше сделать все это с помощью ACL Cakephp?


person binoy    schedule 30.01.2012    source источник


Ответы (1)


Это зависит от того, что вы хотите делать с Acl. Что вы видели в плагине Croogo или Alaxos Acl (кстати, мой плагин), так это использование Acl для разрешения / запрета доступа к некоторым действиям. Это достигается за счет совместного использования AuthComponent и AclComponent. При этом, если вы посмотрите на код Cake, проверка разрешений выполняется в классе DbAcl следующим методом:

function check($aro, $aco, $action = "*")

который потенциально принимает три аргумента.

Вызов этой функции выполняется классом ActionsAuthorize в функции authorize() в следующей строке:

return $Acl->check($user, $this->action($request));

что, очевидно, является вызовом без третьего аргумента.

Так в чем суть этого третьего аргумента? Это способ позаботиться о полях _xxx в таблице данных aros_acos. Таким образом, все вместе это означает, что компоненты Auth + Acl не используют эти поля _xxx для проверки разрешений. На самом деле они используются, но по-другому: когда третий аргумент не используется, все поля, установленные в 1, означают разрешенные, а если одно или несколько полей установлены в -1, это означает запрещенные. Лично для плагина Alaxos Acl я решил установить для всех этих полей значение -1 для отказа, просто для большей ясности.

Что касается вашего приложения, если его «функции» сопоставлены с действиями, вы, вероятно, могли бы просто забыть эти поля _xxx и использовать основной механизм Auth + Acl.

Что касается вашего последнего вопроса (редактирование и удаление владельцем), это часто задаваемый вопрос в Cake ACL. В большинстве случаев ответ заключается в том, что проще сравнить Object.user_id и зарегистрированный идентификатор пользователя, чтобы решить, может ли пользователь редактировать / удалять запись. Cake ACL не поддерживает владельцев записей из коробки.

person nIcO    schedule 31.01.2012