[Checkins] SVN: grokcore.security/trunk/ Fix the condition role feature.
Sylvain Viollow
cvs-admin at zope.org
Wed May 2 09:09:42 UTC 2012
Log message for revision 125574:
Fix the condition role feature.
Changed:
U grokcore.security/trunk/CHANGES.txt
U grokcore.security/trunk/src/grokcore/security/components.py
U grokcore.security/trunk/src/grokcore/security/meta/role.py
D grokcore.security/trunk/src/grokcore/security/meta-minimal.zcml
U grokcore.security/trunk/src/grokcore/security/meta.zcml
-=-
Modified: grokcore.security/trunk/CHANGES.txt
===================================================================
--- grokcore.security/trunk/CHANGES.txt 2012-05-02 09:08:54 UTC (rev 125573)
+++ grokcore.security/trunk/CHANGES.txt 2012-05-02 09:09:38 UTC (rev 125574)
@@ -4,9 +4,9 @@
1.7 (unreleased)
----------------
-- Nothing changed yet.
+- Fix the package to properly work if the extra ``role`` is not
+ specified.
-
1.6 (2012-05-01)
----------------
Modified: grokcore.security/trunk/src/grokcore/security/components.py
===================================================================
--- grokcore.security/trunk/src/grokcore/security/components.py 2012-05-02 09:08:54 UTC (rev 125573)
+++ grokcore.security/trunk/src/grokcore/security/components.py 2012-05-02 09:09:38 UTC (rev 125574)
@@ -15,23 +15,35 @@
from zope.security.permission import Permission
+def api(name):
+ from zope.dottedname.resolve import resolve
+ from zope.interface import Interface
+
+ try:
+ return True, resolve(name)
+ except ImportError:
+ return False, Interface
+
+
class Permission(Permission):
pass
Public = 'zope.Public'
-from zope.securitypolicy.role import Role as securitypolicy_Role
-class Role(securitypolicy_Role):
- """Base class for roles in Grok applications.
+HAVE_ROLE, securitypolicy_Role = api('zope.securitypolicy.role.Role')
- A role is a description of a class of users that gives them a
- machine-readable name, a human-readable title, and a set of
- permissions which users belong to that role should possess::
+if HAVE_ROLE:
+ class Role(securitypolicy_Role):
+ """Base class for roles in Grok applications.
- class Editor(grok.Role):
- grok.name('news.Editor')
- grok.title('Editor')
- grok.permissions('news.EditArticle', 'news.PublishArticle')
+ A role is a description of a class of users that gives them a
+ machine-readable name, a human-readable title, and a set of
+ permissions which users belong to that role should possess::
- """
\ No newline at end of file
+ class Editor(grok.Role):
+ grok.name('news.Editor')
+ grok.title('Editor')
+ grok.permissions('news.EditArticle', 'news.PublishArticle')
+
+ """
Modified: grokcore.security/trunk/src/grokcore/security/meta/role.py
===================================================================
--- grokcore.security/trunk/src/grokcore/security/meta/role.py 2012-05-02 09:08:54 UTC (rev 125573)
+++ grokcore.security/trunk/src/grokcore/security/meta/role.py 2012-05-02 09:09:38 UTC (rev 125574)
@@ -13,62 +13,66 @@
##############################################################################
"""Grokkers for security-related components."""
-import martian
-import grokcore.component
-import grokcore.security
-from martian.error import GrokError
+from grokcore.security.components import HAVE_ROLE
-from zope.i18nmessageid import Message
-from zope.securitypolicy.rolepermission import rolePermissionManager
-from zope.securitypolicy.interfaces import IRole
+if HAVE_ROLE:
+ import martian
-from grokcore.security.directive import permissions
-from grokcore.security.components import Role
-from grokcore.security.meta.permission import PermissionGrokker
-from grokcore.security.meta.permission import default_fallback_to_name
+ import grokcore.component
+ import grokcore.security
+ from martian.error import GrokError
+ from zope.i18nmessageid import Message
+ from zope.securitypolicy.rolepermission import rolePermissionManager
+ from zope.securitypolicy.interfaces import IRole
-class RoleGrokker(martian.ClassGrokker):
- """Grokker for components subclassed from `grok.Role`.
+ from grokcore.security.components import Role
+ from grokcore.security.directive import permissions
+ from grokcore.security.meta.permission import PermissionGrokker
+ from grokcore.security.meta.permission import default_fallback_to_name
- Each role is registered as a global utility providing the service
- `IRole` under its own particular name, and then granted every
- permission named in its `grok.permission()` directive.
- """
- martian.component(Role)
- martian.priority(martian.priority.bind().get(PermissionGrokker()) - 1)
- martian.directive(grokcore.component.name)
- martian.directive(
- grokcore.component.title, get_default=default_fallback_to_name)
- martian.directive(grokcore.component.description)
- martian.directive(permissions)
+ class RoleGrokker(martian.ClassGrokker):
+ """Grokker for components subclassed from `grok.Role`.
- def execute(self, factory, config, name, title, description,
- permissions, **kw):
- if not name:
- raise GrokError(
- "A role needs to have a dotted name for its id. Use "
- "grok.name to specify one.", factory)
- # We can safely convert to unicode, since the directives makes sure
- # it is either unicode already or ASCII.
- if not isinstance(title, Message):
- title = unicode(title)
- if not isinstance(description, Message):
- description = unicode(description)
- role = factory(unicode(name), title, description)
+ Each role is registered as a global utility providing the service
+ `IRole` under its own particular name, and then granted every
+ permission named in its `grok.permission()` directive.
- config.action(
- discriminator=('utility', IRole, name),
- callable=grokcore.component.provideUtility,
- args=(role, IRole, name),
- )
+ """
+ martian.component(Role)
+ martian.priority(martian.priority.bind().get(PermissionGrokker()) - 1)
+ martian.directive(grokcore.component.name)
+ martian.directive(
+ grokcore.component.title, get_default=default_fallback_to_name)
+ martian.directive(grokcore.component.description)
+ martian.directive(permissions)
- for permission in permissions:
+ def execute(self, factory, config, name, title, description,
+ permissions, **kw):
+ if not name:
+ raise GrokError(
+ "A role needs to have a dotted name for its id. Use "
+ "grok.name to specify one.", factory)
+ # We can safely convert to unicode, since the directives makes sure
+ # it is either unicode already or ASCII.
+ if not isinstance(title, Message):
+ title = unicode(title)
+ if not isinstance(description, Message):
+ description = unicode(description)
+ role = factory(unicode(name), title, description)
+
config.action(
- discriminator=('grantPermissionToRole', permission, name),
- callable=rolePermissionManager.grantPermissionToRole,
- args=(permission, name),
+ discriminator=('utility', IRole, name),
+ callable=grokcore.component.provideUtility,
+ args=(role, IRole, name),
)
- return True
+
+ for permission in permissions:
+ config.action(
+ discriminator=('grantPermissionToRole', permission, name),
+ callable=rolePermissionManager.grantPermissionToRole,
+ args=(permission, name),
+ )
+ return True
Deleted: grokcore.security/trunk/src/grokcore/security/meta-minimal.zcml
===================================================================
--- grokcore.security/trunk/src/grokcore/security/meta-minimal.zcml 2012-05-02 09:08:54 UTC (rev 125573)
+++ grokcore.security/trunk/src/grokcore/security/meta-minimal.zcml 2012-05-02 09:09:38 UTC (rev 125574)
@@ -1,6 +0,0 @@
-<configure
- xmlns="http://namespaces.zope.org/zope"
- xmlns:grok="http://namespaces.zope.org/grok">
- <include package="grokcore.component" file="meta.zcml" />
- <grok:grok package=".meta.permission" />
-</configure>
Modified: grokcore.security/trunk/src/grokcore/security/meta.zcml
===================================================================
--- grokcore.security/trunk/src/grokcore/security/meta.zcml 2012-05-02 09:08:54 UTC (rev 125573)
+++ grokcore.security/trunk/src/grokcore/security/meta.zcml 2012-05-02 09:09:38 UTC (rev 125574)
@@ -2,6 +2,5 @@
xmlns="http://namespaces.zope.org/zope"
xmlns:grok="http://namespaces.zope.org/grok">
<include package="grokcore.component" file="meta.zcml" />
- <grok:grok package=".meta.permission" />
- <grok:grok package=".meta.role" />
+ <grok:grok package=".meta" />
</configure>
More information about the checkins
mailing list