Пользователи, Права, Ресурсы, ну и группы и роли.

0 views
Skip to first unread message

dem...@gmail.com

unread,
Oct 5, 2010, 7:34:35 AM10/5/10
to Russian Zope3 group
Разбираюсь с безопасностью в Zope 3.

Есть пользователь, я их создаю как-то так:

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 Зачем их так
похоже назвали

Ilshad Khabibullin

unread,
Oct 5, 2010, 11:07:54 AM10/5/10
to zope...@googlegroups.com
Это вполне типичная задача для каждого проекта, практически.

В субдирективе 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 в виде директивфы нужны тогда, когда пользователь приложения должен создавать их самомстоятельно через браузер. Иначе лучше делать их глобальными утилитами, т.е. zcml-директивами вида permissions, grant. При этом назначения локальных grant-to-principal-и-прочее работают. Лучше, в целом, стараться использовать дополнительный слой абстракций, такой как роли. Это везде стараются делать, не только в zope.


--
Russian Zope3 group http://zope3.ru/
Для отправки сообщений zope...@googlegroups.com
Отписаться zope3-ru-u...@googlegroups.com
Архив http://groups.google.com/group/zope3-ru



--
Ilshad R. Khabibullin
http://astoon.zwiki.org
+7 922 600 56 06

Ilshad Khabibullin

unread,
Oct 5, 2010, 11:11:38 AM10/5/10
to zope...@googlegroups.com
2010/10/5 Ilshad Khabibullin <astoon.net@gmail.com>
Это вполне типичная задача для каждого проекта, практически.

В субдирективе 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 в виде директивфы

typo.

в виде локальной утилиты, я имел в виду
 
Reply all
Reply to author
Forward
0 new messages