Хорошо, я предопределю это, сказав, что я ноб для торта и ACL, и MVC-архитектуры. Я следую учебнику cakephp со своего сайта, http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two.html. Я понимаю содержание учебника, но задаюсь вопросом о самом простом способе взять этот простой групповой ACL на следующий уровень. Я искал SO безрезультатно. Итак, с вопросом.ограничение aro scope в cakephp
Позволяет, например, немного модифицировать версию функции в приведенном выше руководстве. Он просто устанавливает разрешения ARO для ACOs.
Есть много районов, и многие отделы, все с множеством пользователей, в каждом.
отношения заключаются в следующем: Район имеет много отделов - один для многих. В округе есть много пользователей, и у пользователей потенциально может быть много районов (пока они принадлежат к отделу в этом районе). Отдел имеет многопользовательских пользователей - многие для многих.
public function initDB() {
$group = $this->User->Group;
//Allow admins to everything
$group->id = 1;
$this->Acl->allow($group, 'controllers');
// issue 1) allow district managers to districts, departments, users
$group->id = 2;
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Districts');
$this->Acl->allow($group, 'controllers/Departments');
$this->Acl->allow($group, 'controllers/Users');
//issue 2) allow department managers to edit departments and users
$group->id = 3;
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Departments');
$this->Acl->allow($group, 'controllers/Users');
//we add an exit to avoid an ugly "missing views" error message
echo "all done";
exit;
}
Итак, эти права являются установки, хотя это, безусловно, удобно, на самом деле решить небольшую часть проблемы. Как бы то ни было, я действительно только помешал администраторам отдела выполнять функции районного уровня. Администраторы домена и администраторы домена могут выполнять пользователя CRUD без ограничений.
То, что я хотел бы сделать, ограничивает сферу применения каждого из типов администраторов USER CRUD только теми пользователями, которые находятся в пределах их отдела или района. например, администратор отдела администрирования Foo не может удалить других пользователей Admin, а панель управления правами администратора не может изменить все имена других пользователей Dist Admin с именами nancy.
lol. Я серьезно не понимаю, как это сделать.
Я предполагаю, что один из подходов будет получать ранжирование администраторов, например dist admin, а затем выяснить, в каком районе он является пользователем. наконец, вернуть всех пользователей этого района в переменную $ userScope. Опять же, я новичок в pake php и не знаю, как выполнить это предложение, даже если это была хорошая идея и лучший способ справиться с этим. Какие-либо предложения?? Заранее спасибо!!!
Редактировать: Полезный ответ, @nicolae.
Однако все же кажется, что я могу написать функцию, которая возвращает всех пользователей, которым разрешено редактировать любой заданный администратор (любого данного aco). кажется таким образом для меня, потому что я предполагаю, что администратор сам будет частью возвращенной базы пользователей. например, dist admin dist 9, находится в dist 9; аналогично, администратор отдела 1, находится в отделе 1.
ouch. предоставил все таблицы соединений, участвующие в объединении этой информации, это обязательно будет выглядеть как волосы медузы, когда на самом деле набирается. вы можете увидеть мою линию логики. для меня это немного сложно сформулировать. дайте мне знать, если я должен прояснить что-нибудь еще.
@Todd поэтому я ответил вам в дальнейшем с правкой мой ответ. Пожалуйста, проверьте его выше. – NicolaeS