[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