Comments 21
Огромное спасибо, как и заказывал, так сказать
Честно говоря, не вижу в вашей статье преимуществ по сравнению с мануалом zendframework.com/manual/ru/zend.acl.introduction.html
Есть юзер Вася, который входит в группу admin5
Однако, именно этому юзеру надо добавить ещё некоторые привелегии, которых нету у группы admin5
Как это реализовать?
Как вообще в базе хранить права того или иного юзера?
И очень хотелось бы увидеть реализацию Acl на основе хранения прав в базе.
Однако, именно этому юзеру надо добавить ещё некоторые привелегии, которых нету у группы admin5
Как это реализовать?
Как вообще в базе хранить права того или иного юзера?
И очень хотелось бы увидеть реализацию Acl на основе хранения прав в базе.
admin5 это не группа — это как раз таки конкретный админ Вася.
Вариантов хранения может быть очень много и они сильно зависят от того какие права нужно хранить.
Вариантов хранения может быть очень много и они сильно зависят от того какие права нужно хранить.
Ок.
Но а как релизовать то, что я написал? Т.е. если есть группа admin5 и Васе надо добавить ещё прав, кроме тех, которые прописаны в группе? Делать двойную проверку для группы и для юзера?
Но а как релизовать то, что я написал? Т.е. если есть группа admin5 и Васе надо добавить ещё прав, кроме тех, которые прописаны в группе? Делать двойную проверку для группы и для юзера?
Нет, просто расширить иерархию ролей, сделать каждого админа отдельной ролью, которая наследует от группы адмнов, а затем переопределить для него правило и проверять только для роли конкретного админа
$this->allow('admin-5', 'какой-то ресурс', 'какие-то права');
Автор не упомянул, что наследование ролей не является обязательным условием
когда уже хабр перестанет сам постить?
ну так вот… в мануале по Zend_Acl все хорошо расписано. Кроме того есть описание расширенного варианта, когда доступ нужен в зависимости от критериев.
В готовой реализации Acl на основе хранения прав в базе нет смысла, просто потому, что это никак не связанные сущности. Acl лишь регистрирует в себе абстрактные списки ролей, ресурсов и прав и обеспечивает между ними взаимосвязь. А как и где вы храните эти списки, исключительно ваша забота.
ну так вот… в мануале по Zend_Acl все хорошо расписано. Кроме того есть описание расширенного варианта, когда доступ нужен в зависимости от критериев.
В готовой реализации Acl на основе хранения прав в базе нет смысла, просто потому, что это никак не связанные сущности. Acl лишь регистрирует в себе абстрактные списки ролей, ресурсов и прав и обеспечивает между ними взаимосвязь. А как и где вы храните эти списки, исключительно ваша забота.
Ещё было бы интересно как реализовать такой уровень доступа:
role может редактировать только свои записи в resource
Например: модераторы могут редактировать только свои собственные новости; или юзеры могут редактировать только свои собственные комментарии. Админы при этом могут редактировать все комментарии и все новости.
role может редактировать только свои записи в resource
Например: модераторы могут редактировать только свои собственные новости; или юзеры могут редактировать только свои собственные комментарии. Админы при этом могут редактировать все комментарии и все новости.
Можно попробовать реализовать при помощи assertions
в принципе у меня есть такая готовая система связанная вместе с доктриной 2, но можно использовать и отдельно, именно то что вам нужно, если интересует напишите мне.
Единственное, я так понял, что если будут добавляться еще админы — надо будет добавлять отдельно роли? Или можно как то сделать это при чтении из БД?
Вот всегда напрягали названия методов в Zend_Acl
AddRole — понятно
add — что add, куда add? Почему на AddResource?
$this->add(new Zend_Acl_Resource('admin_res'));
Я бы переписал, как $this->addResource('admin_res'), а уже внутри метода обворачивал бы в Zend_Acl_Resource
Кстати можно это сделать как раз в классе-наследнике.
Иногда очень странные решения и интерфейсы появляются у хороших и больших дядек и тетек…
AddRole — понятно
add — что add, куда add? Почему на AddResource?
$this->add(new Zend_Acl_Resource('admin_res'));
Я бы переписал, как $this->addResource('admin_res'), а уже внутри метода обворачивал бы в Zend_Acl_Resource
Кстати можно это сделать как раз в классе-наследнике.
Иногда очень странные решения и интерфейсы появляются у хороших и больших дядек и тетек…
Sign up to leave a comment.
Практикум Zend Framework. Часть третья: Zend_Acl