Есть пользователь, я их создаю как-то так:
site = getObject(site)
sm = site.getSiteManager()
auth = sm.getUtility(IAuthentication)
principalfolder = auth[u'principals']
login=username
password=password
principal =
InternalPrincipal(login,password,u'title',u'description','SSHA')
principalfolder[login] = principal
Есть права, это что можно делать с ресурсом (скажем есть тип ресурса
выключатель. Я определяю для него права "выключить").
Создаю я права вот так:
permission = Permission(id, title, description)
lsm = root.getSiteManager()
lsm.registerUtility(permission, interfaces.IPermission,
permission.id)
Права можно выдать пользователю, вот так:
ppm = IPrincipalPermissionManager(site)
ppm.grantPermissionToPrincipal('Название права','id Юзера')
Это нужно чтоб пользователь имел право "выключить" выключатель не
зависимо от того что это за выключатель.
Права могут быть назначены классу в ZCML (это не интересно в данный
момент), точнее права не назначаются классу а говорится какими правами
должен владеть принципал чтоб иметь доступ к атрибутам и методам
класса.
Права принципе можно назначить объекту, экземпляру класса , это похоже
сделано в zope.security.metaconfigure, там используется какой-то
context.action
Ну и напоследок можно назначить права паре (пользователь, объект).
Чтоб пользователь обладал правами только при доступе к объекту.
Это все в теории, но вот как программно назначить директиву, что
пользователь для доступа к такому-то полю должен обладать таким-то
правом я никак не найду. И вариант (пользователь, объект) тоже.
У меня специфические приложения, это вынос АРМ в web. Тут у каждого
документа десятки полей и каждое поле имеет право видеть или менять
только обладающий определенными правами. Кроме того на конкретном
экземпляре документа нужно иметь возможность расширять права, поэтому
мне кажется я не смогу создать всевозможные адаптеры.
Подскажите как это делать. Можно пример, правда я уже начинаю
путаться, чего стоят zope.security и zope.securitypolicy Зачем их так
похоже назвали
--
Russian Zope3 group http://zope3.ru/
Для отправки сообщений zope...@googlegroups.com
Отписаться zope3-ru-u...@googlegroups.com
Архив http://groups.google.com/group/zope3-ru
Это вполне типичная задача для каждого проекта, практически.
В субдирективе require можно применять атрибут "attributes" (например для методов) и "set_attributes". Значения разделяются пробелами. Примеры использования:
http://github.com/astoon/bbru/blob/master/src/bbru/answers/configure.zcml (для Fbswers и Question).
http://github.com/astoon/bbru/blob/master/src/bbru/localsite/configure.zcml.
Локальные permission в виде директивфы