Zend_Acl: используя базу данных для персистентности, лучше ли сериализовать объект acl или использовать специальную схему? - PullRequest
2 голосов
/ 29 декабря 2010

Мне нужно реализовать компонент Zend_Acl. В документации я прочитал, что объект Zend_Acl может быть сериализован с помощью сериализованной функции PHP. Мое приложение будет иметь много ролей, правил и ресурсов. И мне нужно создать бэкэнд для настройки всего этого.

Мой вопрос: в этом случае лучше сериализовать объект ACL или лучше создать схему для сохранения ролей, правил и ресурсов в трех разных таблицах? Я думаю, это первый вариант, потому что компонент Zend_Acl уже имеет методы для добавления / удаления правил, он обрабатывает наследование каждого типа объекта и имеет возможность запрашивать ACL. Но я хотел бы услышать мнения от людей, которые сталкивались с этой ситуацией прежде, поэтому я не делаю большой ошибки, решая, не спрашивая:)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 05 сентября 2011

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

Основные соображения, которые я считаю, следующие:

  • Размер ACL: оченьбольшой ACL может быть не очень быстрым для сериализации / десериализации, и в целом он может работать медленнее.
  • Модификация ACL: вам нужно иметь возможность выполнять более сложные модификации ACL, чем просто добавление и удаление правил

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

Если есть небольшой ACL, сериализация обычно будет работать достаточно хорошо.

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

(Относительно размера / производительности: вы, вероятно, можете просто профилировать и посмотреть, есть ли у вас проблемы с производительностью, чтобы определитьлучший выбор)

2 голосов
/ 07 февраля 2011

Вам необходимо сначала создать схему, независимо от ее размера или сложности, затем реализовать Zend_Acl, расширив класс, переопределив методы allow() и deny() и поместив в них свой CRUD для схемы разрешений, и затем передайте вызов parent::allow() и parent::deny() соответственно.

Создание ACL займет время, но вы можете его кешировать, используя Zend_Cache. При таком подходе ваш ACL будет синхронизирован с вашей схемой.

...