Я работаю над веб-приложением, в котором разные группы пользователей имеют разный доступ к ресурсам. Думаю, пока ничего особенного, но есть нюанс; приложение разделено на «домены», поэтому каждая из наших клиентских организаций имеет собственное содержание. Здесь я использую более простую модель, чтобы проиллюстрировать свою проблему.
Каждый домен имеет одинаковые типы ресурсов, но каждый экземпляр ресурса подключен только к одному домену. Вот как это будет выглядеть с одним доменом:
Resources: stories, announcements
Roles:
guest // read only access
root // unlimited access
editor // like guest, but with r/w access to resource "stories"
admin // r/w access to both resources
Я придумал два разных подхода для реализации этого с помощью Zend_Acl, первый - просто использовать разные ACL для разных доменов, копируя приведенное выше для каждого домена. Второй - использовать только один ACL и добавлять новые роли для каждого домена:
Domains: domain0, domain1, domain2
Roles:
guest
root
editor-domain0
editor-domain1
editor-domain2
admin-domain0
admin-domain1
admin-domain2
Второй подход имеет то преимущество, что пользователь может быть администратором одного домена, будучи редактором другого (что на самом деле может случиться). Но у него также есть недостаток, заключающийся в том, что роли не статичны - нам нужно генерировать каждый раз, когда мы добавляем или удаляем домен.
Хорош ли какой-либо из этих подходов, или есть более эффективные способы работы с несколькими доменами?