ACL [Роли/Права пользователей]

Здравствуйте. Хотелось бы узнать- как вы разделяете пользователей и их права?
Смотрел в Yii(RBAC), Zend'e, Cake. Но так толком и не понял, как это все организовать.
Пробовал использовать эту "систему", но не получилось, так как для работы с БД использую xPDO.
Если есть, выложите, пожалуйста, готовый код. Спасибо :)

1 ответов


Использую Zend_Acl и не вижу в нем ничего сложного. Мой типичный конфиг выглядит так:


resources.acl.roles.guest.id = "guest"
resources.acl.roles.user.id = "user"
resources.acl.roles.user.parents = "guest"
resources.acl.roles.admin.id = "admin"
resources.acl.roles.admin.parents = "user"

resources.acl.resources.index.id = "index"
resources.acl.resources.error.id = "error"
resources.acl.resources.user.id = "user"

resources.acl.resources.all.allow.all.roles = "all"
resources.acl.resources.user.deny.all.roles = "all"
resources.acl.resources.user.allow.all.roles = "user"
resources.acl.resources.user.allow.login.roles = "all"
resources.acl.resources.user.allow.register.roles = "all"
resources.acl.resources.user.allow.register-complite.roles = "all"
resources.acl.resources.user.allow.confirmation-complite.roles = "all"
resources.acl.resources.user.allow.confirmation.roles = "all"
 
Что означает:

  1. Объявляю роли: гость-пользователь-админ, которые наследуются по цепочке
  2. Объявляю ресурсы (по простому - контроллеры)
  3. Сначала позволяю всем все
  4. Далее закрываю всем доступ к контроллеру user
  5. Далее разрешаю доступ к контроллеру user для пользователя. Админ тоже будет иметь доступ, так как он наследуется от пользователя, а вот гостю будет запрещено, так как на него это расширение не распространяется
  6. Но как-то надо логиниться? Значит разрешаю логин, регистрацию и еще пару действий всем


Вот и все. Единственное, что я храню в базе - это поле role в таблице users, чтобы разделять админов и обычных пользователей.

В общем-то написал систему, точнее переписал и оптимизировал существующую(ссылка в шапке вопроса) под xPDO.