CakePHP ACL: требуется базовая группа / ARO - PullRequest
4 голосов
/ 12 января 2012

Я реализую компонент ACL для моего приложения CakePHP (1.3.14). У меня все настроено правильно, но есть несколько областей, где я все еще неясен.

В основном, нужно ли явно устанавливать права (ACO) для специальной базовой группы пользователей (ARO)?

Для простоты, скажем, у меня есть Администраторы , а затем все остальные ( обычные пользователи ). Так что мне нужно создать группу для этих обычных пользователей и сопоставить все их права доступа? Похоже, что управление этими правами никогда не закончится с ростом приложения.

А как насчет назначения пользователей в несколько групп?

В идеале, если бы у человека была учетная запись пользователя, компонент Auth предоставил бы доступ к системе в целом. Тогда ACL просто откажет им в разделах, защищенных существующей группой.

Кажется, что связь ACL и Auth слишком высока. Но это может быть моим новым (ограниченным) пониманием. Любые разъяснения будут с благодарностью.

UPDATE

Я начал щедрость. Таким образом, я хочу реализовать CakePHP ACL (предпочтительно, но приемлемый соответствующий сторонний компонент), который отвечает следующим требованиям:

  • Назначение пользователей нескольким группам
  • Простое ведение «общедоступной» группы пользователей - не нужно постоянно добавлять контроллеры / действия, к которым может обращаться обычный пользователь
  • Пример кода управления доступом к контроллеру / доступу
  • Пример кода правильного тестирования пользователя, принадлежащего к группе.

Ответы [ 2 ]

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

Я думаю, что лучшее, что вы можете надеяться на использование встроенной ACL-реализации Cake, это что-то вроде следующего:

cake acl create aro root public
cake acl create aro root registered
cake acl create aro registered administrators

(create acos using AclExtras)

cake acl grant registered controllers
cake acl grant public controllers
cake acl deny public controllers/MySecureController
cake acl deny public controllers/Widgets update
cake acl deny public controllers/Widgets delete

(все вышеперечисленное делается через оболочку для торта, но легко переводится навариант PHP)

По сути, вы можете использовать либо парадигму «по умолчанию отрицать» (как продемонстрировано в собственном учебнике ACL Cake), либо парадигму «разрешить по умолчанию», как указано выше.Какой бы метод вы ни выбрали, будет зависеть от того, как вы ожидаете, что приложение будет расти: будет ли большинство ваших контроллеров общедоступными, и только некоторые из них будут доступны только для администраторов, или большая часть вашего приложения будет ограничена общедоступными, если для них будет предоставлен определенный доступ?В любом случае вам все равно нужно либо предоставить, либо запретить доступ.

Обратите внимание на два ARO, созданные в root : public и зарегистрирован .В этой модели при создании дерева ARO обрабатывайте зарегистрированный так, как если бы оно было root - поместите все группы «реальных пользователей» под ним.Таким образом, вы можете использовать ACL как обычно для объектов в зарегистрированных , и вне этого будут существовать публичные пользователи.

Все, что сказано, ничто не останавливаетВы используете механизм аутентификации Cake и используете свой собственный метод контроля доступа.Вот пример: Приложение для простой аутентификации и авторизации . (ПРИМЕЧАНИЕ. Это написано для CakePHP 2.0, но понятия также применимы и к 1.3) .

РЕДАКТИРОВАТЬ -

После перечитыванияНа вопрос и другие ответы я понял, что вы больше нацелены на модель управления доступом на основе ролей, чем на традиционную модель «один на пользователя» встроенного компонента ACL.Вот несколько примеров расширения встроенного компонента аутентификации для RBAC:

ACL на основе ролей в CakePHP

Компонент CakePHP Auth: пользователи, группы, разрешения

Кроме того, эта статья из двух частей описываетподход к авторизации на основе ролей на основе базы данных, который можно применить к вашему приложению Cake.

3 голосов
/ 13 января 2012

Вы можете иметь как дерево ACO, так и дерево ARO. В дереве ARO у вас будет adminsGroup <-usersGroup. Вам нужно будет настроить права для этих групп. В дереве ACO у вас будет baseACO <-subACO <-treeOfACOsForUsers. Вам не нужно будет поддерживать какие-либо новые ACO, если: 1) пользовательским группам разрешено использовать subACO, 2) любой новый ACO является дочерним для subACO. Идея состоит в том, чтобы организовать дерево ACO, чтобы при разрешении доступа к родительскому элементу все дочерние элементы были доступны автоматически. Вы также можете иметь ветку с запрещенным доступом. Поэтому вам нужно будет поддерживать (назначать разрешения) только несколько ветвей, близких к корню. </p>

Вам может быть интересно посмотреть на мою Панель управления PoundCake - плагин, реализующий ACL с дружественным веб-интерфейсом (поддерживается CakePHP v1.3).

UPDATE:

Здесь - это то, что вам нужно.

...