[Checkins] SVN: grok/trunk/src/grok/ Make grok.Permission and grok.Role subclasses from

Jan-Wijbrand Kolman janwijbrand at gmail.com
Thu Sep 20 08:10:49 EDT 2007


Log message for revision 79760:
  Make grok.Permission and grok.Role subclasses from 
  zope.security.permission.Permission and 
  zope.app.securitypolicy.role.Role respectively.

Changed:
  U   grok/trunk/src/grok/components.py
  U   grok/trunk/src/grok/meta.py

-=-
Modified: grok/trunk/src/grok/components.py
===================================================================
--- grok/trunk/src/grok/components.py	2007-09-20 10:17:47 UTC (rev 79759)
+++ grok/trunk/src/grok/components.py	2007-09-20 12:10:48 UTC (rev 79760)
@@ -27,6 +27,8 @@
 from zope import event
 from zope.interface.common import idatetime
 from zope.lifecycleevent import ObjectModifiedEvent
+from zope.security.permission import Permission
+from zope.app.securitypolicy.role import Role
 from zope.publisher.browser import BrowserPage
 from zope.publisher.interfaces import NotFound
 from zope.publisher.interfaces.browser import (IBrowserPublisher,
@@ -481,10 +483,10 @@
 
 Indexes = IndexesClass('Indexes')
 
-class Permission(object):
+class Permission(Permission):
     pass
 
-class Role(object):
+class Role(Role):
     pass
 
 class IGrokLayer(interface.Interface):

Modified: grok/trunk/src/grok/meta.py
===================================================================
--- grok/trunk/src/grok/meta.py	2007-09-20 10:17:47 UTC (rev 79759)
+++ grok/trunk/src/grok/meta.py	2007-09-20 12:10:48 UTC (rev 79760)
@@ -23,7 +23,6 @@
                                                IBrowserSkinType)
 from zope.publisher.interfaces.xmlrpc import IXMLRPCRequest
 from zope.security.permission import Permission
-from zope.security.interfaces import IPermission
 from zope.app.securitypolicy.role import Role
 from zope.app.securitypolicy.rolepermission import rolePermissionManager
 
@@ -178,7 +177,7 @@
 
         # grab layer from class or module
         view_layer = determine_class_directive('grok.layer', factory, module_info, default=IDefaultBrowserLayer)
-        
+
         view_name = util.class_annotation(factory, 'grok.name',
                                           factory_name)
         # __view_name__ is needed to support IAbsoluteURL on views
@@ -485,18 +484,19 @@
     priority = 1500
 
     def grok(self, name, factory, context, module_info, templates):
-        permission_name = util.class_annotation(factory, 'grok.name', None)
-        if permission_name is None:
+        id = util.class_annotation(factory, 'grok.name', None)
+        if id is None:
             raise GrokError(
                 "A permission needs to have a dotted name for its id. Use "
                 "grok.name to specify one.", factory)
-        permission_name = unicode(permission_name)
-        title = unicode(
-            util.class_annotation(factory, 'grok.title', permission_name))
-        # TODO permission description
-        component.provideUtility(
-            Permission(permission_name, title=title),
-            name=permission_name)
+        # We can safely convert to unicode, since the directives make sure
+        # it is either unicode already or ASCII.
+        id = unicode(id)
+        permission = factory(
+            id,
+            unicode(util.class_annotation(factory, 'grok.title', id)),
+            unicode(util.class_annotation(factory, 'grok.description', '')))
+        component.provideUtility(permission, name=id)
         return True
 
 class DefineRoleGrokker(martian.ClassGrokker):
@@ -504,17 +504,22 @@
     priority = DefinePermissionGrokker.priority - 1
 
     def grok(self, name, factory, context, module_info, templates):
-        role_name = util.class_annotation(factory, 'grok.name', None)
-        if role_name is None:
+        id = util.class_annotation(factory, 'grok.name', None)
+        if id is None:
             raise GrokError(
                 "A role needs to have a dotted name for its id. Use "
                 "grok.name to specify one.", factory)
-        title = unicode(util.class_annotation(factory, 'grok.title', role_name))
-        component.provideUtility(Role(role_name, title=title), name=role_name)
-
+        # We can safely convert to unicode, since the directives makes sure
+        # it is either unicode already or ASCII.
+        id = unicode(id)
+        role = factory(
+            id,
+            unicode(util.class_annotation(factory, 'grok.title', id)),
+            unicode(util.class_annotation(factory, 'grok.description', '')))
+        component.provideUtility(role, name=id)
         permissions = util.class_annotation(factory, 'grok.permissions', ())
         for permission in permissions:
-            rolePermissionManager.grantPermissionToRole(permission, role_name)
+            rolePermissionManager.grantPermissionToRole(permission, id)
         return True
 
 class AnnotationGrokker(martian.ClassGrokker):



More information about the Checkins mailing list