From c2ccc9fdb58c80b970d6155c4223918dae855b4e Mon Sep 17 00:00:00 2001 From: helmutm Date: Sat, 13 Nov 2010 09:19:29 +0000 Subject: [PATCH] create separate browser package for security-related views; provide first end-user view: Role Permissions by Type git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@4072 fd906abe-77d9-0310-91a1-e0d9ade77398 --- browser/loops.css | 6 +- browser/skin/lobo/lobo.css | 6 +- security/browser/__init__.py | 3 + security/{browser.py => browser/admin.py} | 0 security/browser/audit.pt | 58 ++++++++++ security/browser/audit.py | 109 ++++++++++++++++++ security/{ => browser}/granting.pt | 0 .../{ => browser}/manage_permissionform.pt | 0 security/{ => browser}/manage_workspace.pt | 0 security/configure.zcml | 32 ++++- 10 files changed, 202 insertions(+), 12 deletions(-) create mode 100644 security/browser/__init__.py rename security/{browser.py => browser/admin.py} (100%) create mode 100644 security/browser/audit.pt create mode 100644 security/browser/audit.py rename security/{ => browser}/granting.pt (100%) rename security/{ => browser}/manage_permissionform.pt (100%) rename security/{ => browser}/manage_workspace.pt (100%) diff --git a/browser/loops.css b/browser/loops.css index 622e04d..4ca8eb1 100644 --- a/browser/loops.css +++ b/browser/loops.css @@ -81,15 +81,15 @@ fieldset.box table.listing td { padding: 0 1px 0 1px; } -table.listing td.number { +table.listing .number { text-align: right; } -table.listing td.center { +table.listing .center { text-align: center; } -table.listing td.nowrap { +table.listing .nowrap { white-space: nowrap; } diff --git a/browser/skin/lobo/lobo.css b/browser/skin/lobo/lobo.css index 3478880..3dae66b 100644 --- a/browser/skin/lobo/lobo.css +++ b/browser/skin/lobo/lobo.css @@ -93,15 +93,15 @@ fieldset.box table.listing td { padding: 0 1px 0 1px; } -table.listing td.number { +table.listing .number { text-align: right; } -table.listing td.center { +table.listing .center { text-align: center; } -table.listing td.nowrap { +table.listing .nowrap { white-space: nowrap; } diff --git a/security/browser/__init__.py b/security/browser/__init__.py new file mode 100644 index 0000000..38314f3 --- /dev/null +++ b/security/browser/__init__.py @@ -0,0 +1,3 @@ +""" +$Id$ +""" diff --git a/security/browser.py b/security/browser/admin.py similarity index 100% rename from security/browser.py rename to security/browser/admin.py diff --git a/security/browser/audit.pt b/security/browser/audit.pt new file mode 100644 index 0000000..5c2305d --- /dev/null +++ b/security/browser/audit.pt @@ -0,0 +1,58 @@ + + + + + + +
+
+ Type: + +     + +     + Permission: + + + +
+ + + + + + +
Object +
+ +
+
+ + + + + blubb + + + + \ No newline at end of file diff --git a/security/browser/audit.py b/security/browser/audit.py new file mode 100644 index 0000000..6ace1b1 --- /dev/null +++ b/security/browser/audit.py @@ -0,0 +1,109 @@ +# +# Copyright (c) 2010 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +End user views for security audits and similar tasks. + +$Id$ +""" + +from zope import interface, component +from zope.app.pagetemplate import ViewPageTemplateFile +from zope.app.securitypolicy.interfaces import IRolePermissionMap +from zope.app.securitypolicy.zopepolicy import SettingAsBoolean +from zope.cachedescriptors.property import Lazy +from zope.traversing.api import getName, getParent + +from loops.browser.concept import ConceptView +from loops import util +from loops.util import _ + + +class BaseSecurityView(ConceptView): + + template = ViewPageTemplateFile('audit.pt') + + +class RolePermissionsByType(BaseSecurityView): + + @Lazy + def macro(self): + return self.template.macros['role_permissions'] + + @Lazy + def types(self): + result = [self.conceptManager.get(name) for name in self.options('types')] + return [dict(token=getName(t), label=t.title, object=t) + for t in result if t is not None] + + @Lazy + def selectedType(self): + if 'selected_type' in self.request.form: + typeName = self.request.form['selected_type'] + type = self.conceptManager.get(typeName) + return dict(token=getName(type), label=type.title, object=type) + if self.types: + return self.types[0] + return dict(token=u'', label=u'', object=None) + + @Lazy + def objects(self): + if not self.selectedType: + return [] + result = self.selectedType['object'].getChildren([self.typePredicate]) + return [dict(title=o.title, settings=self.getPermissionSettings(o)) + for o in result] + + def getPermissionSettings(self, obj): + result = [] + rpm = IRolePermissionMap(obj, None) + for r in self.roles: + if rpm is not None: + setting = rpm.getSetting(self.selectedPermission, r) + setting = SettingAsBoolean[setting] + if setting is not None: + result.append(setting and '+' or '-') + else: + result.append(u'') + else: + result.append(u'') + return result + + @Lazy + def permissions(self): + return self.options('permissions') + + @Lazy + def selectedPermission(self): + if 'selected_permission' in self.request.form: + return self.request.form['selected_permission'] + if self.permissions: + return self.permissions[0] + return u'' + + @Lazy + def roles(self): + return self.options('roles') + + +class WorkspaceAssignments(BaseSecurityView): + + @Lazy + def macro(self): + return self.template.macros['workspace_assignments'] + diff --git a/security/granting.pt b/security/browser/granting.pt similarity index 100% rename from security/granting.pt rename to security/browser/granting.pt diff --git a/security/manage_permissionform.pt b/security/browser/manage_permissionform.pt similarity index 100% rename from security/manage_permissionform.pt rename to security/browser/manage_permissionform.pt diff --git a/security/manage_workspace.pt b/security/browser/manage_workspace.pt similarity index 100% rename from security/manage_workspace.pt rename to security/browser/manage_workspace.pt diff --git a/security/configure.zcml b/security/configure.zcml index 2c7b334..dba17bf 100644 --- a/security/configure.zcml +++ b/security/configure.zcml @@ -37,28 +37,48 @@ + + + + + + + +