Смена родителя для ресурса - Zend ACL - 1.7.3 - PullRequest
1 голос
/ 20 февраля 2009

У нас есть следующая структура для нашего приложения

require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();
$acl = new Zend_Acl();

// application
$acl->add(new Zend_Acl_Resource('application1'));
// groups
$acl->add(new Zend_Acl_Resource('group1'), 'application1');
$acl->add(new Zend_Acl_Resource('group2'), 'application1');
// fields
$acl->add(new Zend_Acl_Resource('field1'), 'group1');
$acl->add(new Zend_Acl_Resource('field2'), 'group1');
$acl->add(new Zend_Acl_Resource('field3'), 'group2');
$acl->add(new Zend_Acl_Resource('field4'), 'application1');

// roles
$acl->addRole(new Zend_Acl_Role('applicant'));
$acl->addRole(new Zend_Acl_Role('admin'), 'applicant');

// permissions
$acl->allow('applicant', 'application1', 'view');
$acl->allow('applicant', 'group1', 'edit');

Это представляет базу данных приложений колледжа, а группы / поля являются компонентами приложения колледжа. Исходя из вышесказанного, заявитель имеет право на редактирование поля 2.

Вся структура хранится как объект acl в базе данных mysql.

Через некоторое время администраторы решат переместить field2 из group1 в group2, как можно изменить объект acl?

Я проверил файл Acl.php, но нет методов, в которых можно изменить родительский ресурс ресурса и тем самым автоматически обновить правила / разрешения.

Спасибо.

Shashikant

Ответы [ 2 ]

1 голос
/ 20 февраля 2009

Лично я бы предпочел не хранить сериализованный объект ACL в базе данных. Я бы предпочел хранить информацию о ролях, ресурсах и разрешениях непосредственно в таблицах базы данных и создавать новый объект ACL на лету при загрузке приложения.

Если вы действительно хотите сериализовать объект ACL в базу данных, возможно, вам удастся удалить рассматриваемые ресурсы и повторно добавить их в ACL. Код будет выглядеть примерно так, хотя я не передавал это интерпретатору PHP:

$acl->remove('field2');
$acl->add(new Zend_Acl_Resource('field2'), 'group2');
0 голосов
/ 02 марта 2011

Первый ответ: ПОЧЕМУ, черт возьми, вы бы сохранили эту логику доступа в базе данных ??? Это часть так называемой бизнес-логики, которая обычно принадлежит сценарию. База данных - это место для необработанных исходных данных, например, факт, какая роль пользователя принадлежит. Я понимаю, что для повышения производительности кешируется логическая часть.

...