* looking for arch@arch.thinkmo.de--2003-archives/moin--main--1.3--patch-556 to compare with
* comparing to arch@arch.thinkmo.de--2003-archives/moin--main--1.3--patch-556
M  MoinMoin/multiconfig.py
M  MoinMoin/wikiacl.py

* modified files

--- orig/MoinMoin/multiconfig.py
+++ mod/MoinMoin/multiconfig.py
@@ -321,6 +321,13 @@
         # e.g u'%(page_front_page)s' % self
         self.navi_bar = [elem % self for elem in self.navi_bar]
 
+        # precompile acl strings
+        if self.acl_enabled:
+            from wikiacl import AccessControlList
+            self.acl_default = AccessControlList(None, self.acl_rights_default, cfg=self)
+            self.acl_before = AccessControlList(None, self.acl_rights_before, cfg=self, default=True)
+            self.acl_after = AccessControlList(None, self.acl_rights_after, cfg=self, default=True)
+
     def _config_check(self):
         """ Check namespace and warn about unknown names
         


--- orig/MoinMoin/wikiacl.py
+++ mod/MoinMoin/wikiacl.py
@@ -113,33 +113,25 @@
 
     special_users = ["All", "Known", "Trusted"]
 
-    def __init__(self, request, lines=[]):
+    def __init__(self, request, lines=[], cfg=None, default=False):
         """Initialize an ACL, starting from <nothing>.
         """
-        self.setLines(request.cfg, lines)
+        self.is_default = default
+        if cfg is not None:
+            self.setLines(cfg, lines)
+        else:
+            self.setLines(request.cfg, lines)
 
     def setLines(self, cfg, lines=[]):
         self.clean()
-        self.addBefore(cfg)
-        if not lines:
-            self.addDefault(cfg)
-        else:
-            for line in lines:
-                self.addLine(cfg, line)
-        self.addAfter(cfg)
+        for line in lines:
+            self.addLine(cfg, line)
 
     def clean(self):
         self.acl = [] # [ ('User', {"read": 0, ...}), ... ]
         self.acl_lines = []
         self._is_group = {}
 
-    def addBefore(self, cfg):
-        self.addLine(cfg, cfg.acl_rights_before, remember=0)
-    def addDefault(self, cfg):
-        self.addLine(cfg, cfg.acl_rights_default, remember=0)
-    def addAfter(self, cfg):
-        self.addLine(cfg, cfg.acl_rights_after, remember=0)
-
     def addLine(self, cfg, aclstring, remember=1):
         """ Add another ACL line
 
@@ -199,7 +191,12 @@
         
         is_group_member = request.dicts.has_member
 
-        allowed = None
+        if self.is_default:
+            allowed = None
+        else:
+            allowed = request.cfg.acl_before.may(request, name, dowhat)
+            if allowed is not None:
+                return allowed
         for entry, rightsdict in self.acl:
             if entry in self.special_users:
                 handler = getattr(self, "_special_"+entry, None)
@@ -210,7 +207,9 @@
                 allowed = rightsdict.get(dowhat)
             if allowed is not None:
                 return allowed
-        return 0
+        if self.is_default:
+            return allowed
+        return request.cfg.acl_after.may(request, name, dowhat)
 
     def getString(self, b='#acl ', e='\n'):
         """print the acl strings we were fed with"""
@@ -355,5 +354,7 @@
             else:
                 args = ""
             acl_lines.append(args)
+    if not acl_lines:
+        return request.cfg.acl_default
     return AccessControlList(request, acl_lines)
 



