Насколько силен именно ACL-компонент CakePHP? - PullRequest
0 голосов
/ 28 марта 2012

Я неоднократно читал здесь и на разных сайтах, что компонент ACL является очень мощным инструментом. Тем не менее, следующее предложение обычно начинается с версии «Однако руководство по пирогу плохо документирует это, и поэтому я использую эту систему». Я новичок в программировании и определенно боролся с изучением Cake из-за документации; Я в недоумении относительно того, что именно делает AclComponent таким сильным, поскольку все рекомендуют его, но многие все еще используют что-то еще. Может кто-нибудь предложить конкретные примеры или учебники, которые помогут мне лучше понять этот компонент? Например, какой код помогает избежать написания, как ограничить доступ для каждого пользователя вместо всей группы и т. Д.

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Система ACL Cake является мощной, потому что она чрезвычайно гибкая и позволяет очень тонко контролировать доступ к вашему приложению. Большинство людей используют его в базовом виде, то есть этот пользователь / группа имеет доступ к этому методу контроллера. Хотя это распространенный случай использования, вы также можете использовать его, чтобы ограничить доступ модели к действию create другой модели.

Например, чтобы ограничить группу администраторов созданием записей только для модели PrivateModel:

// add aco
$this->Acl->Aco->add(array(
'alias' => 'PrivateModel'
'model' => 'PrivateModel',
'foreign_key' => null
));

// add aro
$this->Acl->Aro->array(array(
'alias' => 'Admin'
'model' => 'Group',
'foreign_key' => 1
));

// allow Admin to read PrivateModel #1
$this->Acl->allow('Admin', 'PrivateModel1', 'create');

// check permission
$allowed = $this->Acl->check('Admin', 'PrivateModel', 'read'); // true
$allowed = $this->Acl->check('Admin', 'PrivateModel', 'create'); // false

Ответ по умолчанию на "должен ли я использовать ACL" часто бывает "нет" просто потому, что для настройки и понимания может потребоваться некоторое время. Примеров ACL Cake было достаточно, чтобы я продолжал, когда у меня изначально не было понимания даже концепций ACL или деревьев MPTT.

В настоящее время у меня есть приложение, в котором есть группы в виде ARO, и ACLComponent использует контроллер для проверки метода isAuthorized(), который извлекает группу из вошедшего в систему пользователя и использует ее для проверки, разрешено ли действие. Опять же, это, вероятно, самый основной подход к ACL.

1 голос
/ 29 марта 2012

Как вы уже указали в своем вопросе "Однако ... документация на торт", Я не мог согласиться с этим.

Я видел многих членов моей команды в прошломБорьба за понимание концепции целого Acl, Aro и Aco, и документация о торте, возможно, добавляет ему дополнительную сложность, чем ее решение.

Настоящая магия ACL начинается с Aro и Aco .

ARO (Access Request Object) - They are the entities who request for services. 
for eg. Users, Roles (Admin, Manager, Moderator)

ACO (Access Control Object) - They are the entities which are requested. 
for eg. Posts, Posts->add, Posts->view, Posts->edit

Мы можем настроить наши модели с поведением requester таким образом, чтобы при каждом создании новой записи она автоматически синхронизировалась с соответствующим Aro.

Как уже продемонстрировал jeremyharris, вы можете использовать Aro и Aco mapping с соответствующими привилегиями, чтобы ограничить / контролировать контроль доступа вашего приложения.

Кроме того, вы можете сделать свою жизнь довольно легко с помощью ACL с помощью плагина Alaxos ACL Этот плагин действительно упрощает всю настройку ACL, особенно с точки зрения пользовательского интерфейса

Консоль Cake также предоставляет оболочку для инициализации.ze your db для настройки ACL

cake acl initdb    // cakephp 1.1, from shell with create db setup for acl
$ cake schema create DbAcl    // cakephp 1.2 and above

Существует дополнительный плагин от Markstory под названием AclExtras , который предоставляет вам оболочку для упрощения управления acl, например, создание aco-узлов, тестирование и восстановление.aco, aro деревья.Это удивительный плагин.

...