[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Security - metaConfigure.py:1.1.2.23.6.1 protectClass.py:1.1.2.10.4.1 publicClass.py:1.1.2.6.4.1

Barry Warsaw barry@wooz.org
Thu, 21 Mar 2002 19:27:27 -0500


Update of /cvs-repository/Zope3/lib/python/Zope/App/Security
In directory cvs.zope.org:/tmp/cvs-serv22971/lib/python/Zope/App/Security

Modified Files:
      Tag: contextual-directives
	metaConfigure.py protectClass.py publicClass.py 
Log Message:
This is work to pass context to zcml directives, so that directives
know where they live.  This is inspired by some suggested changes to
the naming syntax that Stephan and I discussed with Jim.
Specifically, a leading dot, as in

    .JobBoardEx.JobList.

would signify a name relative to the current package, instead of
relative to ZopeProducts.  Also, we'd like to change the trailing dot
to a `+' for signifying "look-the-last-name-up-recursively-until-you-
can't-anymore".  E.g.:

    .JobBoardEx.JobList+

I'm committing this on a branch because it breaks the unit tests and
I'm not sure of the best way to fix the remaining 10 failures.  Jim
suggests that we commit these to the branch so that he can work on
them too.


=== Zope3/lib/python/Zope/App/Security/metaConfigure.py 1.1.2.23 => 1.1.2.23.6.1 ===
 
 
-from Zope.Configuration.name import resolve
 from protectClass import protectClass
 from publicClass import publicClass
 from PermissionRegistry import permissionRegistry as perm_reg
@@ -28,9 +27,9 @@
 from PrincipalRoleManager import principalRoleManager as principal_role_mgr
 from Zope.Configuration.Action import Action
 
-def defaultPolicy(name):
-    policy = resolve( name )
-    if callable( policy ):
+def defaultPolicy(_context, name):
+    policy = _context.resolve(name)
+    if callable(policy):
         policy = policy()
     return [
         Action(
@@ -40,7 +39,7 @@
             )
         ]
 
-def definePermission(permission_id, title, description=''):
+def definePermission(_context, permission_id, title, description=''):
     return [
         Action(
             discriminator = ('definePermission', permission_id),
@@ -49,7 +48,7 @@
             )
         ]
 
-def defineRole(role_id, title, description=''):
+def defineRole(_context, role_id, title, description=''):
     return [
         Action(
             discriminator = ('defineRole', role_id),
@@ -58,7 +57,7 @@
             )
         ]
 
-def principal(principal_id, title, login, password, description=''):
+def principal(_context, principal_id, title, login, password, description=''):
     return [
         Action(
             discriminator = ('principal', principal_id),
@@ -67,7 +66,7 @@
             )
         ]
 
-def defaultPrincipal(principal_id, title, description=''):
+def defaultPrincipal(_context, principal_id, title, description=''):
     return [
         Action(
             discriminator = 'defaultPrincipal',
@@ -76,7 +75,7 @@
             )
         ]
 
-def grantPermissionToRole(permission_id, role_id):
+def grantPermissionToRole(_context, permission_id, role_id):
     return [
         Action(
             discriminator = ('grantPermissionToRole', permission_id, role_id),
@@ -85,7 +84,7 @@
             )
         ]
 
-def grantPermissionToPrincipal(permission_id, principal_id):
+def grantPermissionToPrincipal(_context, permission_id, principal_id):
     return [
         Action(
             discriminator = ('grantPermissionToPrincipal', 
@@ -96,7 +95,7 @@
         )
     ]
 
-def assignRoleToPrincipal(role_id, principal_id):
+def assignRoleToPrincipal(_context, role_id, principal_id):
     return [
         Action(
             discriminator = ('assignRoleToPrincipal', role_id, principal_id),


=== Zope3/lib/python/Zope/App/Security/protectClass.py 1.1.2.10 => 1.1.2.10.4.1 ===
 instances."""
 
-from Zope.Configuration.name import resolve
 from Interface.Method import Method
 from Exceptions import UndefinedPermissionError
 from PermissionRegistry import permissionRegistry
@@ -42,12 +41,13 @@
 
     __class_implements__ = INonEmptyDirective    
     
-    def __init__(self, name, permission_id=None, interface=None,
+    def __init__(self, _context, name, permission_id=None, interface=None,
                  methods=None):
-        self.__class = resolve(name)
+        self.__class = _context.resolve(name)
         self.__name = name
         self.__permission_id = permission_id
-        self.__r = self.protect(permission_id, interface, methods)
+        self.__context = _context
+        self.__r = self.protect(_context, permission_id, interface, methods)
         # So subsequent simple-declaration-style self() calls process instances
         self.__empty = 1
 
@@ -65,7 +65,8 @@
         else:
             return permission_id
 
-    def protect(self, permission_id=None, interface=None, methods=None):
+    def protect(self, _context, permission_id=None, interface=None,
+                methods=None):
         "Protect a specific aspect"
 
         self.__empty = 0
@@ -83,7 +84,7 @@
 
         return r
 
-    def instances(self, permission_id=None):
+    def instances(self, _context, permission_id=None):
         "Protect instances of the class, as opposed to methods"
         self.__empty = 0
 
@@ -113,7 +114,7 @@
 
     def __protectByInterface(self, interface, permission_id, r):
         "Set a permission on methods in an interface."
-        interface = resolve(interface)
+        interface = self.__context.resolve(interface)
         for n, d in interface.namesAndDescriptions(1):
             if isinstance(d, Method):
                 self.__protectMethod(n, permission_id, r)


=== Zope3/lib/python/Zope/App/Security/publicClass.py 1.1.2.6 => 1.1.2.6.4.1 ===
 instances."""
 
-from Zope.Configuration.name import resolve
 from Interface.Method import Method
 
 PublicPermission = 'Zope.Public'
@@ -30,10 +29,11 @@
 
 class publicClass(protectClass):
 
-    def __init__(self, name, permission_id=None, interface=None,
+    def __init__(self, _context, name, permission_id=None, interface=None,
                  methods=None):
         self._getPermission(permission_id) # Prohibit explicit permission!
-        protectClass.__init__(self, name, permission_id=PublicPermission,
+        protectClass.__init__(self, _context, name,
+                              permission_id=PublicPermission,
                               interface=interface, methods=methods)
 
     def _getPermission(self, permission_id=None):