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:
helmutm 2009-01-27 12:07:33 +00:00
parent 466f05e5a8
commit 87cb629f1c
11 changed files with 76 additions and 56 deletions

View file

@ -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):

View file

@ -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"

View file

@ -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;
} }

View file

@ -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

View file

@ -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):

View file

@ -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 []

View file

@ -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.

View file

@ -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"

View file

@ -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):

View file

@ -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)" />