Режим действия Cakephp ACL против режима CRUD - PullRequest
1 голос
/ 30 января 2012

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

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

1 Ответ

5 голосов
/ 31 января 2012

Это зависит от того, что вы хотите сделать с 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 не поддерживает владельцев записей из коробки.

...