Я ищу для разработки ACL-системы, поддерживаемой доктриной, для моего собственного использования, хотя я борюсь с некоторыми из первоначальных соображений дизайна.Создание общего OO ACL с использованием Doctrine
Прямо сейчас я смотрю на то, чтобы он на основе классов и уникальных идентификаторов, сохраняя их в таблице, например:
Table: ACL
ResourceClass
ResourceKey
RoleClass
RoleKey
Permission
Очевидно, что это будет требовать, чтобы я самоанализом на классы, которые в настоящее время запрошены для получения правильных значений ResourceClass.
Мне интересно, был ли этот подход выполнен раньше или если у кого-то есть советы, чтобы сделать это лучше. Другие вещи, такие как рекурсивные отношения между Ролями, также смешивают меня, поскольку я не уверен, как рекурсивно запрашивать сборку и ACL для Ресурса.
Я не большой поклонник Zend ACL, поэтому, пожалуйста, никаких предложений для этого - я знаю об этом!
Дальнейшие разъяснения будут сделаны по этому вопросу, поскольку люди взвешивают, поэтому, пожалуйста, несите меня! Этот вопрос может потребовать нескольких итераций! ;)
Удивительно, мне придется изучить все разные поведения. Чтобы быть понятным, вы использовали реализацию NestedSet для своих ролей/групп? Таким образом, вы можете получить полный список ролей/групп, а затем запросить таблицу, в которой хранятся все ваши разрешения со всеми этими ключами? –
Для этого вам не нужна Учение. NestedSet - это всего лишь шаблон SQL для хранения структур дерева lik в базе данных. Вы можете реализовать его по своему усмотрению. Приведение ACL в соответствие с NestedSet дает вам возможность легко находить разрешения детей, родителей, восходящих и т. Д. Это очень подходит для больших структур ACL. Для простых ACL достаточно массива, Zend_Config (или сериализации ACL, если вам действительно нужно db). – takeshin
Мне не интересно использовать zend_ACL, поскольку он довольно громоздкий. Я надеюсь получить более подробную информацию о том, как вы храните ACL как дерево, так как для меня это не древо данных. В то время как роли. Мне нужно сохранить их в базе данных. Вот почему я использую доктрину. –