[Checkins] SVN: Sandbox/ulif/grok-adminui-with-principals/src/grok/admin/view Added permissons view.

Uli Fouquet uli at gnufix.de
Sun Aug 19 23:17:06 EDT 2007


Log message for revision 79008:
  Added permissons view.

Changed:
  U   Sandbox/ulif/grok-adminui-with-principals/src/grok/admin/view.py
  A   Sandbox/ulif/grok-adminui-with-principals/src/grok/admin/view_templates/permissions.pt

-=-
Modified: Sandbox/ulif/grok-adminui-with-principals/src/grok/admin/view.py
===================================================================
--- Sandbox/ulif/grok-adminui-with-principals/src/grok/admin/view.py	2007-08-20 03:12:57 UTC (rev 79007)
+++ Sandbox/ulif/grok-adminui-with-principals/src/grok/admin/view.py	2007-08-20 03:17:04 UTC (rev 79008)
@@ -47,9 +47,12 @@
 from zope.app.folder.interfaces import IRootFolder
 from zope.app.security.interfaces import ILogout, IAuthentication
 from zope.app.security.interfaces import IUnauthenticatedPrincipal
+from zope.app.security.interfaces import IPermission
+from zope.app.security.settings import Unset, Allow, Deny
 from zope.security.proxy import removeSecurityProxy
 from zope.app.securitypolicy.interfaces import IPrincipalRoleManager, IRole
 from zope.app.securitypolicy.interfaces import IPrincipalRoleMap
+from zope.app.securitypolicy.interfaces import IRolePermissionManager
 from zope.proxy import removeAllProxies
 from zope.tal.taldefs import attrEscape
 
@@ -415,6 +418,65 @@
         self.redirect(self.url())
 
 
+class Permissions(GAIAView):
+    """Permissions management screen.
+    """
+    grok.name('permissions')
+    grok.require('grok.ManageApplications')
+
+    msg = None
+
+    def getRoles(self):
+        """Get locally available roles.
+
+        Returns a list of rolename/utility tuples.
+        """
+        return zope.component.getUtilitiesFor(IRole, self.context)
+
+    def getPermissions(self):
+        permissions = getattr(self, 'permissions', None)
+        if permissions is not None:
+            return self.permissions
+        permissions = [perm for name, perm in
+                       zope.component.getUtilitiesFor(IPermission)
+                       if name != 'zope.public']
+        permissions.sort(lambda x,y: x.id < y.id and -1 or 1)
+        return permissions
+
+    def getPermissionRoles(self):
+        prm = IRolePermissionManager(self.context)
+        result = {}
+        for perm in self.permissions:
+            proles = prm.getRolesForPermission(perm.id)
+            settings = {}
+            for role, setting in proles:
+                settings[role] = setting.getName()
+            nosetting = Unset.getName()
+            result[perm.id] = {}
+            for role in self.roles:
+                result[perm.id][role] = settings.get(role, nosetting)
+        return result
+
+    def getSettingNames(self):
+        return [setting.getName() for setting in [Unset, Allow, Deny]]
+
+    def getPRoleName(self, permid, rolename):
+        return "%s.%s" % (permid.replace('.', '_'),
+                          rolename.replace('.', '_'))
+
+    def setPermissionRoles(self, proles):
+        pass
+
+    def update(self, proles=None):
+        self.proles_arg = proles
+        self.roles = [name for name, util in self.getRoles()]
+        self.permissions = list(self.getPermissions())
+        if proles is not None:
+            self.setPermissionRoles(proles)
+        self.proles = self.getPermissionRoles()
+        self.settingnames = self.getSettingNames()
+
+
 class Users(GAIAView):
     """Users management screen.
 

Added: Sandbox/ulif/grok-adminui-with-principals/src/grok/admin/view_templates/permissions.pt
===================================================================
--- Sandbox/ulif/grok-adminui-with-principals/src/grok/admin/view_templates/permissions.pt	                        (rev 0)
+++ Sandbox/ulif/grok-adminui-with-principals/src/grok/admin/view_templates/permissions.pt	2007-08-20 03:17:04 UTC (rev 79008)
@@ -0,0 +1,52 @@
+<html metal:use-macro="context/@@macros/gaia-page">
+  <div metal:fill-slot="content">
+
+    <h1>Edit Roles and Permissions</h1>
+
+    <div tal:condition="view/msg">
+      <span class="emph" tal:content="view/msg">Message</span>
+    </div>
+
+    <div>
+
+      <fieldset>
+	<legend>Add new permission:</legend>
+	
+	<form method="post">
+	  <fieldset class="menu-box2">
+	  </fieldset>
+	</form>
+      </fieldset>
+
+      <fieldset>
+	<legend>Roles and Permissions:</legend>
+	
+	<form method="post">
+	  <fieldset class="menu-box2">
+	    <table>
+	      <tr>
+		<th />
+		<th tal:repeat="role view/roles"
+		    tal:content="role">role</th>
+	      </tr>
+	      <tr tal:repeat="perm view/permissions">
+		<td tal:content="perm/id">perm.id</td>
+		<td tal:repeat="role view/roles" align="center">
+		  <select name="proles">
+		    <option tal:repeat="setting view/settingnames"
+			    tal:attributes="selected python:setting==view.proles[perm.id][role];
+					    value python: '%s.%s' % (view.getPRoleName(perm.id, role), setting)"
+			    tal:content="setting" />
+		  </select>
+		</td>
+	      </tr>
+	    </table>
+	    <input type="submit" name="SET_PROLES" value="Save" />
+	  </fieldset>
+	</form>
+      </fieldset>
+
+    </div>
+
+  </div>
+</html>



More information about the Checkins mailing list