improvements on work item queries, translations; work in progress: security: additional permissions
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3182 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
466f05e5a8
commit
87cb629f1c
11 changed files with 76 additions and 56 deletions
|
@ -56,6 +56,7 @@ from cybertools.stateful.interfaces import IStateful
|
||||||
from cybertools.text import mimetypes
|
from cybertools.text import mimetypes
|
||||||
from cybertools.typology.interfaces import IType, ITypeManager
|
from cybertools.typology.interfaces import IType, ITypeManager
|
||||||
from loops.common import adapted
|
from loops.common import adapted
|
||||||
|
from loops.config.base import DummyOptions
|
||||||
from loops.i18n.browser import I18NView
|
from loops.i18n.browser import I18NView
|
||||||
from loops.interfaces import IResource, IView, INode
|
from loops.interfaces import IResource, IView, INode
|
||||||
from loops.organize.tracking import access
|
from loops.organize.tracking import access
|
||||||
|
@ -114,13 +115,9 @@ class BaseView(GenericView, I18NView):
|
||||||
super(BaseView, self).__init__(context, request)
|
super(BaseView, self).__init__(context, request)
|
||||||
# TODO: get rid of removeSecurityProxy() call - not yet...
|
# TODO: get rid of removeSecurityProxy() call - not yet...
|
||||||
self.context = removeSecurityProxy(context)
|
self.context = removeSecurityProxy(context)
|
||||||
#self.context = context
|
|
||||||
#self.setSkin(self.loopsRoot.skinName)
|
|
||||||
#self.checkLanguage()
|
|
||||||
try:
|
try:
|
||||||
if not canAccessObject(context):
|
if not canAccessObject(context):
|
||||||
raise Unauthorized
|
raise Unauthorized('%r: title' % (context))
|
||||||
#request.response.redirect('login.html')
|
|
||||||
except ForbiddenAttribute: # ignore when testing
|
except ForbiddenAttribute: # ignore when testing
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -393,8 +390,7 @@ class BaseView(GenericView, I18NView):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def options(self):
|
def options(self):
|
||||||
#return IOptions(self.context)
|
return component.queryAdapter(self.adapted, IOptions) or DummyOptions()
|
||||||
return IOptions(self.adapted)
|
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def globalOptions(self):
|
def globalOptions(self):
|
||||||
|
|
|
@ -111,14 +111,13 @@
|
||||||
title="loops Container"
|
title="loops Container"
|
||||||
description="A top-level loops container"
|
description="A top-level loops container"
|
||||||
permission="zope.ManageContent"
|
permission="zope.ManageContent"
|
||||||
view="AddLoopsContainer.html"
|
view="AddLoopsContainer.html" />
|
||||||
/>
|
|
||||||
|
|
||||||
<containerViews
|
<containerViews
|
||||||
for="loops.interfaces.ILoops"
|
for="loops.interfaces.ILoops"
|
||||||
contents="zope.ManageContent"
|
index="zope.View"
|
||||||
add="zope.ManageContent"
|
contents="loops.ManageSite"
|
||||||
/>
|
add="loops.ManageSite" />
|
||||||
|
|
||||||
<page
|
<page
|
||||||
name="edit.html"
|
name="edit.html"
|
||||||
|
@ -136,13 +135,13 @@
|
||||||
schema="loops.interfaces.IConceptManager"
|
schema="loops.interfaces.IConceptManager"
|
||||||
content_factory="loops.concept.ConceptManager"
|
content_factory="loops.concept.ConceptManager"
|
||||||
template="add.pt"
|
template="add.pt"
|
||||||
permission="zope.ManageContent"
|
permission="zope.ManageContent" />
|
||||||
/>
|
|
||||||
|
|
||||||
<containerViews
|
<containerViews
|
||||||
for="loops.interfaces.IConceptManager"
|
for="loops.interfaces.IConceptManager"
|
||||||
add="zope.ManageContent"
|
index="loops.ManageSite"
|
||||||
/>
|
contents="loops.ManageSite"
|
||||||
|
add="loops.ManageSite" />
|
||||||
|
|
||||||
<!-- concept -->
|
<!-- concept -->
|
||||||
|
|
||||||
|
@ -243,8 +242,9 @@
|
||||||
|
|
||||||
<containerViews
|
<containerViews
|
||||||
for="loops.interfaces.IResourceManager"
|
for="loops.interfaces.IResourceManager"
|
||||||
add="zope.ManageContent"
|
index="loops.ManageSite"
|
||||||
/>
|
contents="loops.ManageSite"
|
||||||
|
add="loops.ManageSite" />
|
||||||
|
|
||||||
<!-- resource in general -->
|
<!-- resource in general -->
|
||||||
|
|
||||||
|
@ -354,55 +354,44 @@
|
||||||
schema="loops.interfaces.IViewManager"
|
schema="loops.interfaces.IViewManager"
|
||||||
content_factory="loops.view.ViewManager"
|
content_factory="loops.view.ViewManager"
|
||||||
template="add.pt"
|
template="add.pt"
|
||||||
permission="zope.ManageContent"
|
permission="zope.ManageContent" />
|
||||||
/>
|
|
||||||
|
|
||||||
<containerViews
|
<containerViews
|
||||||
for="loops.interfaces.IViewManager"
|
for="loops.interfaces.IViewManager"
|
||||||
index="zope.ManageContent"
|
index="zope.View"
|
||||||
add="zope.ManageContent"
|
add="zope.ManageContent" />
|
||||||
/>
|
|
||||||
|
|
||||||
<menuItem
|
<menuItem
|
||||||
for="loops.interfaces.IViewManager"
|
for="loops.interfaces.IViewManager"
|
||||||
action="contents.html"
|
action="contents.html"
|
||||||
permission="zope.ManageContent"
|
permission="zope.ManageContent"
|
||||||
menu="zmi_views" title="Contents"
|
menu="zmi_views" title="Contents" />
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- record manager -->
|
<!-- record manager -->
|
||||||
|
|
||||||
<containerViews
|
<containerViews
|
||||||
for="loops.interfaces.IRecordManager"
|
for="loops.interfaces.IRecordManager"
|
||||||
index="zope.ManageContent"
|
index="loops.ManageSite"
|
||||||
/>
|
add="loops.ManageSite" />
|
||||||
|
|
||||||
<menuItem
|
<menuItem
|
||||||
for="loops.interfaces.IRecordManager"
|
for="loops.interfaces.IRecordManager"
|
||||||
action="contents.html"
|
action="contents.html"
|
||||||
permission="zope.ManageContent"
|
permission="loops.ManageSite"
|
||||||
menu="zmi_views" title="Contents"
|
menu="zmi_views" title="Contents" />
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- node -->
|
<!-- node -->
|
||||||
|
|
||||||
<icon
|
<icon
|
||||||
name="zmi_icon"
|
name="zmi_icon"
|
||||||
for="loops.interfaces.INode"
|
for="loops.interfaces.INode"
|
||||||
file="node_icon.gif"
|
file="node_icon.gif" />
|
||||||
/>
|
|
||||||
|
|
||||||
<menuItem
|
<menuItem
|
||||||
for="loops.interfaces.INode"
|
for="loops.interfaces.INode"
|
||||||
action="@@contents.html"
|
action="contents.html"
|
||||||
permission="zope.ManageContent"
|
permission="zope.ManageContent"
|
||||||
menu="zmi_views" title="Contents"
|
menu="zmi_views" title="Contents" />
|
||||||
/>
|
|
||||||
|
|
||||||
<!--<containerViews
|
|
||||||
for="loops.interfaces.INode"
|
|
||||||
index="zope.ManageContent"
|
|
||||||
/>-->
|
|
||||||
|
|
||||||
<addform
|
<addform
|
||||||
label="Add Node"
|
label="Add Node"
|
||||||
|
@ -412,10 +401,8 @@
|
||||||
fields="title description nodeType viewName body"
|
fields="title description nodeType viewName body"
|
||||||
template="add.pt"
|
template="add.pt"
|
||||||
permission="zope.ManageContent">
|
permission="zope.ManageContent">
|
||||||
|
|
||||||
<widget field="description" height="2" />
|
<widget field="description" height="2" />
|
||||||
<widget field="body" height="8" />
|
<widget field="body" height="8" />
|
||||||
|
|
||||||
</addform>
|
</addform>
|
||||||
|
|
||||||
<addMenuItem
|
<addMenuItem
|
||||||
|
@ -423,8 +410,7 @@
|
||||||
title="Node"
|
title="Node"
|
||||||
description="A node provides access to concepts, possibly hierarchically organized"
|
description="A node provides access to concepts, possibly hierarchically organized"
|
||||||
permission="zope.ManageContent"
|
permission="zope.ManageContent"
|
||||||
view="AddLoopsNode.html"
|
view="AddLoopsNode.html" />
|
||||||
/>
|
|
||||||
|
|
||||||
<editform
|
<editform
|
||||||
label="Edit Node"
|
label="Edit Node"
|
||||||
|
|
|
@ -64,10 +64,11 @@ table.listing {
|
||||||
table.listing th {
|
table.listing th {
|
||||||
font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif;
|
font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif;
|
||||||
color: #000040;
|
color: #000040;
|
||||||
|
padding: 0 2px 0 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.listing td {
|
table.listing td {
|
||||||
padding: 0 1px 0 1px;
|
padding: 0 2px 0 2px;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
|
@ -503,8 +503,10 @@ class NodeView(BaseView):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def workItems(self):
|
def workItems(self):
|
||||||
return component.getMultiAdapter((self.context, self.request),
|
target = self.virtualTargetObject
|
||||||
name='workitems.html')
|
if target is not None:
|
||||||
|
return component.getMultiAdapter((target, self.request),
|
||||||
|
name='taskworkitems.html')
|
||||||
|
|
||||||
# comments
|
# comments
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
# Copyright (c) 2009 Helmut Merz helmutm@cy55.de
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -120,7 +120,7 @@ class Concept(Contained, Persistent):
|
||||||
typePred = self.getConceptManager().getTypePredicate()
|
typePred = self.getConceptManager().getTypePredicate()
|
||||||
if typePred is None:
|
if typePred is None:
|
||||||
return None
|
return None
|
||||||
parents = self.getParents([typePred])
|
parents = self.getParents([typePred], noSecurityCheck=True)
|
||||||
# TODO (?): check for multiple types (->Error)
|
# TODO (?): check for multiple types (->Error)
|
||||||
return parents and parents[0] or None
|
return parents and parents[0] or None
|
||||||
def setConceptType(self, concept):
|
def setConceptType(self, concept):
|
||||||
|
|
|
@ -73,7 +73,8 @@ class LoopsOptions(Options):
|
||||||
|
|
||||||
def parseContextOptions(self):
|
def parseContextOptions(self):
|
||||||
def result():
|
def result():
|
||||||
for opt in self.context.options:
|
options = getattr(self.context, 'options', [])
|
||||||
|
for opt in options:
|
||||||
parts = opt.split(':', 1)
|
parts = opt.split(':', 1)
|
||||||
key = parts[0].strip()
|
key = parts[0].strip()
|
||||||
if len(parts) == 1:
|
if len(parts) == 1:
|
||||||
|
@ -94,3 +95,8 @@ class QueryOptions(LoopsOptions):
|
||||||
|
|
||||||
adapts(IQueryConcept)
|
adapts(IQueryConcept)
|
||||||
|
|
||||||
|
|
||||||
|
class DummyOptions(Options):
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
return []
|
||||||
|
|
|
@ -183,9 +183,6 @@
|
||||||
<require
|
<require
|
||||||
permission="zope.ManageContent"
|
permission="zope.ManageContent"
|
||||||
set_schema=".interfaces.INode" />
|
set_schema=".interfaces.INode" />
|
||||||
<!--<require
|
|
||||||
permission="zope.View"
|
|
||||||
interface="zope.app.container.interfaces.IReadContainer" />-->
|
|
||||||
</class>
|
</class>
|
||||||
|
|
||||||
<!-- record manager -->
|
<!-- record manager -->
|
||||||
|
|
Binary file not shown.
|
@ -3,7 +3,7 @@ msgstr ""
|
||||||
|
|
||||||
"Project-Id-Version: $Id$\n"
|
"Project-Id-Version: $Id$\n"
|
||||||
"POT-Creation-Date: 2007-05-22 12:00 CET\n"
|
"POT-Creation-Date: 2007-05-22 12:00 CET\n"
|
||||||
"PO-Revision-Date: 2008-12-15 12:00 CET\n"
|
"PO-Revision-Date: 2009-01-26 12:00 CET\n"
|
||||||
"Last-Translator: Helmut Merz <helmutm@cy55.de>\n"
|
"Last-Translator: Helmut Merz <helmutm@cy55.de>\n"
|
||||||
"Language-Team: loops developers <helmutm@cy55.de>\n"
|
"Language-Team: loops developers <helmutm@cy55.de>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
@ -478,3 +478,18 @@ msgstr "Zielobjekt zuordnen"
|
||||||
msgid "Search Term"
|
msgid "Search Term"
|
||||||
msgstr "Suchbegriff"
|
msgstr "Suchbegriff"
|
||||||
|
|
||||||
|
msgid "Day"
|
||||||
|
msgstr "Tag"
|
||||||
|
|
||||||
|
msgid "Start"
|
||||||
|
msgstr "Beginn"
|
||||||
|
|
||||||
|
msgid "End"
|
||||||
|
msgstr "Ende"
|
||||||
|
|
||||||
|
msgid "Duration"
|
||||||
|
msgstr "Dauer"
|
||||||
|
|
||||||
|
msgid "Effort"
|
||||||
|
msgstr "Aufwand"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
# Copyright (c) 2009 Helmut Merz helmutm@cy55.de
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -114,7 +114,7 @@ class Resource(Image, Contained):
|
||||||
typePred = cm.getTypePredicate()
|
typePred = cm.getTypePredicate()
|
||||||
if typePred is None:
|
if typePred is None:
|
||||||
return None
|
return None
|
||||||
concepts = self.getConcepts([typePred])
|
concepts = self.getConcepts([typePred], noSecurityCheck=True)
|
||||||
# TODO (?): check for multiple types (->Error)
|
# TODO (?): check for multiple types (->Error)
|
||||||
return concepts and concepts[0] or cm.get('file', None)
|
return concepts and concepts[0] or cm.get('file', None)
|
||||||
def setResourceType(self, concept):
|
def setResourceType(self, concept):
|
||||||
|
|
|
@ -15,26 +15,43 @@
|
||||||
id="loops.ManageSite"
|
id="loops.ManageSite"
|
||||||
title="[loops-manage-site-permission] loops: Manage Site" />
|
title="[loops-manage-site-permission] loops: Manage Site" />
|
||||||
|
|
||||||
|
<permission
|
||||||
|
id="loops.ManageTypes"
|
||||||
|
title="[loops-manage-types-permission] loops: Manage Types" />
|
||||||
|
|
||||||
|
<permission
|
||||||
|
id="loops.ManageWorkspaces"
|
||||||
|
title="[loops-manage-workspaces-permission] loops: Manage Workspaces" />
|
||||||
|
|
||||||
<permission
|
<permission
|
||||||
id="loops.ViewRestricted"
|
id="loops.ViewRestricted"
|
||||||
title="[loops-view-restricted-permission] loops: View Restricted Information" />
|
title="[loops-view-restricted-permission] loops: View Restricted Information" />
|
||||||
|
|
||||||
|
<permission
|
||||||
|
id="loops.EditRestricted"
|
||||||
|
title="[loops-edit-restricted-permission] loops: Edit Restricted Information" />
|
||||||
|
|
||||||
<!-- roles and default permissions for roles -->
|
<!-- roles and default permissions for roles -->
|
||||||
|
|
||||||
<role id="loops.SiteManager"
|
<role id="loops.SiteManager"
|
||||||
title="[loops-manage-site-role] loops: Site Manager" />
|
title="[loops-manage-site-role] loops: Site Manager" />
|
||||||
<grant role="loops.SiteManager" permission="loops.ManageSite" />
|
<grant role="loops.SiteManager" permission="loops.ManageSite" />
|
||||||
|
<grant role="loops.SiteManager" permission="loops.ManageTypes" />
|
||||||
|
<grant role="loops.SiteManager" permission="loops.ManageWorkspaces" />
|
||||||
<grant role="loops.SiteManager" permission="loops.xmlrpc.ManageConcepts" />
|
<grant role="loops.SiteManager" permission="loops.xmlrpc.ManageConcepts" />
|
||||||
<grant role="loops.SiteManager" permission="zope.ManageContent" />
|
<grant role="loops.SiteManager" permission="zope.ManageContent" />
|
||||||
<grant role="loops.SiteManager" permission="zope.View" />
|
<grant role="loops.SiteManager" permission="zope.View" />
|
||||||
|
|
||||||
<role id="loops.Staff"
|
<role id="loops.Staff"
|
||||||
title="[loops-staff-role] loops: Staff" />
|
title="[loops-staff-role] loops: Staff" />
|
||||||
|
<grant role="loops.Staff" permission="loops.ManageWorkspaces" />
|
||||||
|
<grant role="loops.Staff" permission="loops.EditRestricted" />
|
||||||
<grant role="loops.Staff" permission="zope.ManageContent" />
|
<grant role="loops.Staff" permission="zope.ManageContent" />
|
||||||
<grant role="loops.Staff" permission="zope.View" />
|
<grant role="loops.Staff" permission="zope.View" />
|
||||||
|
|
||||||
<role id="loops.Master"
|
<role id="loops.Master"
|
||||||
title="[loops-master-role] loops: Master" />
|
title="[loops-master-role] loops: Master" />
|
||||||
|
<grant role="loops.Master" permission="zope.ManageContent" />
|
||||||
|
|
||||||
<role id="loops.xmlrpc.ConceptManager"
|
<role id="loops.xmlrpc.ConceptManager"
|
||||||
title="[xmlrpc-manage-concepts-role] loops: Concept Manager (XML-RPC)" />
|
title="[xmlrpc-manage-concepts-role] loops: Concept Manager (XML-RPC)" />
|
||||||
|
|
Loading…
Add table
Reference in a new issue