2012-01-30 3 views
1

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

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

ответ

5

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