diff --git a/README.txt b/README.txt
index dd88c3f..3451b9b 100755
--- a/README.txt
+++ b/README.txt
@@ -882,6 +882,12 @@ To be done...
[u'Note', u'Type']
+Security
+========
+
+ >>> from loops.security.browser import admin, audit
+
+
Import/Export
=============
diff --git a/security/browser/audit.pt b/security/browser/audit.pt
index 604140a..df9c83c 100644
--- a/security/browser/audit.pt
+++ b/security/browser/audit.pt
@@ -53,6 +53,30 @@
+
+
+
+
+
+
diff --git a/security/browser/audit.py b/security/browser/audit.py
index ba7696a..5030aa9 100644
--- a/security/browser/audit.py
+++ b/security/browser/audit.py
@@ -109,7 +109,7 @@ class WorkspaceAssignments(BaseSecurityView):
return self.template.macros['workspace_assignments']
@Lazy
- def workspacePrediactes(self):
+ def workspacePredicates(self):
result = [self.conceptManager.get(p)
for p in ('isowner', 'ismaster', 'ismember')]
return [p for p in result if p is not None]
@@ -122,6 +122,19 @@ class WorkspaceAssignments(BaseSecurityView):
return type.getChildren([self.typePredicate])
return []
+ def getAssignments(self, workspace):
+ rels = []
+ for wsp in self.workspacePredicates:
+ rels.append(workspace.getChildRelations([wsp]))
+ return rels
+
+
+class PersonWorkspaceAssignments(WorkspaceAssignments):
+
+ @Lazy
+ def macro(self):
+ return self.template.macros['person_workspace_assignments']
+
@Lazy
def persons(self):
tPerson = self.conceptManager['person']
@@ -130,5 +143,5 @@ class WorkspaceAssignments(BaseSecurityView):
def getAssignments(self, person):
rels = []
for ws in self.workspaces:
- rels.append(ws.getChildRelations(self.workspacePrediactes, person))
+ rels.append(ws.getChildRelations(self.workspacePredicates, person))
return [', '.join([r.predicate.title for r in prels]) for prels in rels]