[Checkins] SVN: z3ext.preferences/trunk/ Added permission checker to directive

Nikolay Kim fafhrd at datacom.kz
Mon Apr 21 08:33:26 EDT 2008


Log message for revision 85527:
  Added permission checker to directive

Changed:
  U   z3ext.preferences/trunk/CHANGES.txt
  U   z3ext.preferences/trunk/src/z3ext/preferences/utils.py
  U   z3ext.preferences/trunk/src/z3ext/preferences/zcml.py

-=-
Modified: z3ext.preferences/trunk/CHANGES.txt
===================================================================
--- z3ext.preferences/trunk/CHANGES.txt	2008-04-21 06:56:17 UTC (rev 85526)
+++ z3ext.preferences/trunk/CHANGES.txt	2008-04-21 12:33:24 UTC (rev 85527)
@@ -2,6 +2,12 @@
 CHANGES
 =======
 
+1.2.1 (2008-04-22)
+------------------
+
+- Added permission checker to directive
+
+
 1.2.0 (2008-04-18)
 ------------------
 

Modified: z3ext.preferences/trunk/src/z3ext/preferences/utils.py
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/utils.py	2008-04-21 06:56:17 UTC (rev 85526)
+++ z3ext.preferences/trunk/src/z3ext/preferences/utils.py	2008-04-21 12:33:24 UTC (rev 85527)
@@ -42,6 +42,7 @@
 """
 
 from zope import interface
+from zope.security import checkPermission
 from zope.security.interfaces import IPrincipal, IGroup, IMemberAwareGroup
 
 
@@ -65,3 +66,12 @@
 
     def __call__(self, group):
         return self.iface.providedBy(group.__principal__)
+
+
+class PermissionChecker(object):
+
+    def __init__(self, permission):
+        self.permission = permission
+
+    def __call__(self, prefs):
+        return checkPermission(self.permission, prefs)

Modified: z3ext.preferences/trunk/src/z3ext/preferences/zcml.py
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/zcml.py	2008-04-21 06:56:17 UTC (rev 85526)
+++ z3ext.preferences/trunk/src/z3ext/preferences/zcml.py	2008-04-21 12:33:24 UTC (rev 85527)
@@ -19,6 +19,7 @@
 from zope.schema import Int
 from zope.component import getUtility, queryUtility, getGlobalSiteManager
 from zope.schema.interfaces import IField
+from zope.location.interfaces import ILocation
 
 from zope.security.zcml import Permission
 from zope.security.checker import Checker, CheckerPublic
@@ -38,7 +39,7 @@
 from interfaces import IPreferenceGroup
 from preference import PreferenceGroup
 from preferencetype import PreferenceType
-from utils import PrincipalChecker
+from utils import PrincipalChecker, PermissionChecker
 
 
 class IPreferenceGroupDirective(interface.Interface):
@@ -121,6 +122,8 @@
         if interface.interfaces.IInterface.providedBy(for_):
             tests = tests + (PrincipalChecker(for_),)
 
+        tests = tuple(tests) + (PermissionChecker(permission),)
+
         group = Class(tests)
 
         utility(_context, IPreferenceGroup, group, name=id)
@@ -135,10 +138,13 @@
         self._context = _context
         self._permission = permission
 
-        self.require(_context, permission, interface=(IPreferenceGroup, schema))
-        self.require(_context, 'z3ext.ModifyPreference', set_schema=(schema,))
+        self.require(_context, permission,
+                     interface=(IPreferenceGroup, schema), set_schema=(schema,))
         self.require(_context, CheckerPublic,
-                     interface=(IEnumerableMapping,), attributes=('isAvailable',))
+                     interface=(IEnumerableMapping, ILocation),
+                     attributes=('isAvailable',
+                                 '__id__', '__schema__',
+                                 '__title__', '__description__'))
 
         schema.setTaggedValue('preferenceID', id)
 



More information about the Checkins mailing list