2010-07-19 6 views
4

Я ищу для разработки ACL-системы, поддерживаемой доктриной, для моего собственного использования, хотя я борюсь с некоторыми из первоначальных соображений дизайна.Создание общего OO ACL с использованием Doctrine

Прямо сейчас я смотрю на то, чтобы он на основе классов и уникальных идентификаторов, сохраняя их в таблице, например:

Table: ACL 
    ResourceClass 
    ResourceKey 
    RoleClass 
    RoleKey 
    Permission 

Очевидно, что это будет требовать, чтобы я самоанализом на классы, которые в настоящее время запрошены для получения правильных значений ResourceClass.

Мне интересно, был ли этот подход выполнен раньше или если у кого-то есть советы, чтобы сделать это лучше. Другие вещи, такие как рекурсивные отношения между Ролями, также смешивают меня, поскольку я не уверен, как рекурсивно запрашивать сборку и ACL для Ресурса.

Я не большой поклонник Zend ACL, поэтому, пожалуйста, никаких предложений для этого - я знаю об этом!

Дальнейшие разъяснения будут сделаны по этому вопросу, поскольку люди взвешивают, поэтому, пожалуйста, несите меня! Этот вопрос может потребовать нескольких итераций! ;)

ответ

3

Я использую NestedSet для хранения иерархии ACL и кеша, чтобы ускорить работу.

Doctrine ORM for PHP - NestedSet

Вот пост, который может быть полезен также:

Zend_Acl part 3: creating and storing dynamic ACLs | CodeUtopia - The blog of Jani Hartikainen

(обратите внимание на двух предыдущих частей, а).

+0

Удивительно, мне придется изучить все разные поведения. Чтобы быть понятным, вы использовали реализацию NestedSet для своих ролей/групп? Таким образом, вы можете получить полный список ролей/групп, а затем запросить таблицу, в которой хранятся все ваши разрешения со всеми этими ключами? –

+0

Для этого вам не нужна Учение. NestedSet - это всего лишь шаблон SQL для хранения структур дерева lik в базе данных. Вы можете реализовать его по своему усмотрению. Приведение ACL в соответствие с NestedSet дает вам возможность легко находить разрешения детей, родителей, восходящих и т. Д. Это очень подходит для больших структур ACL. Для простых ACL достаточно массива, Zend_Config (или сериализации ACL, если вам действительно нужно db). – takeshin

+0

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

Смежные вопросы