[Checkins] SVN: grok/branches/jw-proper-components-for-role-permission/ Implement Permissions and Roles as proper component classes

Jan-Wijbrand Kolman janwijbrand at gmail.com
Mon Aug 27 05:36:57 EDT 2007


Log message for revision 79296:
  Implement Permissions and Roles as proper component classes 
  that actually get instantiated and where the instances get registered.

Changed:
  U   grok/branches/jw-proper-components-for-role-permission/doc/minitutorials/permissions.txt
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/admin/docgrok.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/admin/view.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/components.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/grant.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/require.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/roles.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/meta.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_permission_name.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_permission_xmlrpc3.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_role_name.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require_json.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require_xmlrpc.py
  U   grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/view_decorator.py

-=-
Modified: grok/branches/jw-proper-components-for-role-permission/doc/minitutorials/permissions.txt
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/doc/minitutorials/permissions.txt	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/doc/minitutorials/permissions.txt	2007-08-27 09:36:56 UTC (rev 79296)
@@ -68,14 +68,16 @@
      # recommended to make them unique by prefixing them with the application
      # name.
      class ViewContacts(grok.Permission):
-         grok.name('mysite.ViewContacts')
-         grok.title('View Contacts') # optional
+         id = 'mysite.ViewContacts'
+         title = u'View Contacts' # optional
 
      class AddContacts(grok.Permission):
-         grok.name('mysite.AddContacts')
+         id = 'mysite.AddContacts'
+         title = u'Add Contacts'
 
      class EditContacts(grok.Permission):
-         grok.name('mysite.EditContacts')
+         id = 'mysite.EditContacts'
+         title = 'Edit Contacts'
 
      class ViewContactComplete(grok.View)
          """Display Contact Info, including email.
@@ -220,15 +222,15 @@
 .. code-block:: python
 
      class MemberRole(grok.Role):
-         grok.name('mysite.Member')
-         grok.title('Contacts Member') # optional
+         id = 'mysite.Member')
+         title = u'Contacts Member' # optional
          grok.permissions(
              'mysite.ViewContacts',
              'mysite.AddContacts')
 
      class AdministratorRole(grok.Role):
-         grok.name('mysite.Editor')
-         grok.title('Contacts Administrator') # optional
+         id = 'mysite.Editor'
+         title = u'Contacts Administrator' # optional
          grok.permissions(
              'mysite.ViewContacts',
              'mysite.AddContacts',

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/admin/docgrok.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/admin/docgrok.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/admin/docgrok.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -57,7 +57,8 @@
 grok.context(IRootFolder)
 
 class ManageApplications(grok.Permission):
-    grok.name('grok.ManageApplications')
+    id = 'grok.ManageApplications'
+    title = u'Grok Manage Applications'
 
 def find_filepath(dotted_path):
     """Find the filepath for a dotted name.

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/admin/view.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/admin/view.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/admin/view.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -52,7 +52,8 @@
 grok.context(IRootFolder)
 
 class ManageApplications(grok.Permission):
-    grok.name('grok.ManageApplications')
+    id = 'grok.ManageApplications'
+    title = u'Grok Manage Applications'
 
 class Add(grok.View):
     """Add an application.

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/components.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/components.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/components.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -38,6 +38,8 @@
 from zope.traversing.browser.absoluteurl import AbsoluteURL
 from zope.traversing.browser.absoluteurl import _safe as SAFE_URL_CHARACTERS
 from zope.annotation.interfaces import IAttributeAnnotatable
+from zope.security.interfaces import IPermission
+from zope.app.securitypolicy.interfaces import IRole
 
 from zope.app.pagetemplate.engine import TrustedAppPT
 from zope.app.publisher.browser import getDefaultViewName
@@ -481,7 +483,7 @@
 Indexes = IndexesClass('Indexes')
 
 class Permission(object):
-    pass
+    interface.implements(IPermission)
 
 class Role(object):
-    pass
+    interface.implements(IRole)

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/grant.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/grant.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/grant.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -24,7 +24,8 @@
 import grok
 
 class ASCIIPermission(grok.Permission):
-    grok.name('grok.ascii-permission')
+    id = 'grok.ascii-permission'
+    title = u'ASCII Permission'
 
 # TODO Technically, it's absolutely possible to give permissions
 # non-ASCII names. However the way Zope 3's grant view uses widgets to

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/require.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/require.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/require.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -34,7 +34,8 @@
 import zope.interface
 
 class ViewPainting(grok.Permission):
-    grok.name('grok.ViewPainting')
+    id = 'grok.ViewPainting'
+    title = u'View Painting'
 
 class CavePainting(grok.View):
 

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/roles.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/roles.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/ftests/security/roles.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -44,20 +44,24 @@
 import zope.interface
 
 class View(grok.Permission):
-    grok.name('grok.ViewPainting')
+    id = 'grok.ViewPainting'
+    title = u'View Painting'
 
 class Edit(grok.Permission):
-    grok.name('grok.EditPainting')
+    id = 'grok.EditPainting'
+    title = u'Edit Painting'
 
 class Erase(grok.Permission):
-    grok.name('grok.ErasePainting')
+    id = 'grok.ErasePainting'
+    title = u'Erase Painting'
 
 class Approve(grok.Permission):
-    grok.name('grok.ApprovePainting')
+    id = 'grok.ApprovePainting'
+    title = u'Approve Painting'
 
 class PaintingOwner(grok.Role):
-    grok.name('grok.PaintingOwner')
-    grok.title('Painting Owner')
+    id = 'grok.PaintingOwner'
+    title = u'Painting Owner'
     grok.permissions(
         'grok.ViewPainting', 'grok.EditPainting', 'grok.ErasePainting')
 

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/meta.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/meta.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/meta.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -21,8 +21,6 @@
                                                IBrowserRequest,
                                                IBrowserPublisher)
 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
 
@@ -497,18 +495,8 @@
     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:
-            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)
+        permission = factory()
+        component.provideUtility(permission, name=permission.id)
         return True
 
 class DefineRoleGrokker(martian.ClassGrokker):
@@ -516,17 +504,11 @@
     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:
-            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)
-
+        role = factory()
+        component.provideUtility(role, name=role.id)
         permissions = util.class_annotation(factory, 'grok.permissions', ())
         for permission in permissions:
-            rolePermissionManager.grantPermissionToRole(permission, role_name)
+            rolePermissionManager.grantPermissionToRole(permission, role.id)
         return True
 
 class AnnotationGrokker(martian.ClassGrokker):

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_permission_name.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_permission_name.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_permission_name.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -4,8 +4,7 @@
   >>> grok.grok(__name__)
   Traceback (most recent call last):
   ...
-  GrokError: A permission needs to have a dotted name for its id.
-  Use grok.name to specify one.
+  AttributeError: 'MissingName' object has no attribute 'id'
 """
 
 import grok

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_permission_xmlrpc3.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_permission_xmlrpc3.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_permission_xmlrpc3.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -16,7 +16,8 @@
 import zope.interface
 
 class Foo(grok.Permission):
-    grok.name('foo')
+    id = 'foo'
+    title = u'Foo'
 
 class MissingPermission(grok.XMLRPC):
     grok.context(zope.interface.Interface)

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_role_name.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_role_name.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/missing_role_name.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -3,8 +3,8 @@
 
   >>> grok.grok(__name__)
   Traceback (most recent call last):
-  GrokError: A role needs to have a dotted name for its id.
-  Use grok.name to specify one.
+  ...
+  AttributeError: 'MissingName' object has no attribute 'id'
 """
 
 import grok

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -11,10 +11,12 @@
 import zope.interface
 
 class One(grok.Permission):
-    grok.name('permission.1')
+    id = 'permission.1'
+    title = u'First Permission'
 
 class Two(grok.Permission):
-    grok.name('permission.2')
+    id = 'permission.2'
+    title = u'Second Permission'
 
 class MultipleView(grok.View):
     grok.context(zope.interface.Interface)

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require_json.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require_json.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require_json.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -11,10 +11,12 @@
 import zope.interface
 
 class One(grok.Permission):
-    grok.name('permission.1')
+    id = 'permission.1'
+    title = u'First Permission'
 
 class Two(grok.Permission):
-    grok.name('permission.2')
+    id = 'permission.2'
+    title = u'Second Permission'
 
 class MultipleJSON(grok.JSON):
     grok.context(zope.interface.Interface)

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require_xmlrpc.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require_xmlrpc.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/multiple_require_xmlrpc.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -10,10 +10,12 @@
 import zope.interface
 
 class One(grok.Permission):
-    grok.name('permission.1')
+    id = 'permission.1'
+    title = u'First Permission'
 
 class Two(grok.Permission):
-    grok.name('permission.2')
+    id = 'permission.2'
+    title = u'Second Permission'
 
 class MultipleXMLRPC(grok.XMLRPC):
     grok.context(zope.interface.Interface)

Modified: grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/view_decorator.py
===================================================================
--- grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/view_decorator.py	2007-08-27 08:46:04 UTC (rev 79295)
+++ grok/branches/jw-proper-components-for-role-permission/src/grok/tests/security/view_decorator.py	2007-08-27 09:36:56 UTC (rev 79296)
@@ -12,7 +12,8 @@
 import zope.interface
 
 class Bogus(grok.Permission):
-    grok.name('bogus.perm')
+    id = 'bogus.perm'
+    title = u'Bogus Permission'
 
 class BogusView(grok.View):
     grok.context(zope.interface.Interface)



More information about the Checkins mailing list