[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