From 87cb629f1ca8f836b8669c5293cfa2ade128fd08 Mon Sep 17 00:00:00 2001 From: helmutm Date: Tue, 27 Jan 2009 12:07:33 +0000 Subject: [PATCH] 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 --- browser/common.py | 10 ++---- browser/configure.zcml | 60 ++++++++++++-------------------- browser/loops.css | 3 +- browser/node.py | 6 ++-- concept.py | 4 +-- config/base.py | 8 ++++- configure.zcml | 3 -- locales/de/LC_MESSAGES/loops.mo | Bin 9010 -> 9198 bytes locales/de/LC_MESSAGES/loops.po | 17 ++++++++- resource.py | 4 +-- security.zcml | 17 +++++++++ 11 files changed, 76 insertions(+), 56 deletions(-) diff --git a/browser/common.py b/browser/common.py index 056073b..50001b1 100644 --- a/browser/common.py +++ b/browser/common.py @@ -56,6 +56,7 @@ from cybertools.stateful.interfaces import IStateful from cybertools.text import mimetypes from cybertools.typology.interfaces import IType, ITypeManager from loops.common import adapted +from loops.config.base import DummyOptions from loops.i18n.browser import I18NView from loops.interfaces import IResource, IView, INode from loops.organize.tracking import access @@ -114,13 +115,9 @@ class BaseView(GenericView, I18NView): super(BaseView, self).__init__(context, request) # TODO: get rid of removeSecurityProxy() call - not yet... self.context = removeSecurityProxy(context) - #self.context = context - #self.setSkin(self.loopsRoot.skinName) - #self.checkLanguage() try: if not canAccessObject(context): - raise Unauthorized - #request.response.redirect('login.html') + raise Unauthorized('%r: title' % (context)) except ForbiddenAttribute: # ignore when testing pass @@ -393,8 +390,7 @@ class BaseView(GenericView, I18NView): @Lazy def options(self): - #return IOptions(self.context) - return IOptions(self.adapted) + return component.queryAdapter(self.adapted, IOptions) or DummyOptions() @Lazy def globalOptions(self): diff --git a/browser/configure.zcml b/browser/configure.zcml index c36e68c..61e9645 100644 --- a/browser/configure.zcml +++ b/browser/configure.zcml @@ -111,14 +111,13 @@ title="loops Container" description="A top-level loops container" permission="zope.ManageContent" - view="AddLoopsContainer.html" - /> + view="AddLoopsContainer.html" /> + index="zope.View" + contents="loops.ManageSite" + add="loops.ManageSite" /> + permission="zope.ManageContent" /> + index="loops.ManageSite" + contents="loops.ManageSite" + add="loops.ManageSite" /> @@ -243,8 +242,9 @@ + index="loops.ManageSite" + contents="loops.ManageSite" + add="loops.ManageSite" /> @@ -354,55 +354,44 @@ schema="loops.interfaces.IViewManager" content_factory="loops.view.ViewManager" template="add.pt" - permission="zope.ManageContent" - /> + permission="zope.ManageContent" /> + index="zope.View" + add="zope.ManageContent" /> + menu="zmi_views" title="Contents" /> + index="loops.ManageSite" + add="loops.ManageSite" /> + permission="loops.ManageSite" + menu="zmi_views" title="Contents" /> + file="node_icon.gif" /> - - + menu="zmi_views" title="Contents" /> - - + view="AddLoopsNode.html" /> Error) return parents and parents[0] or None def setConceptType(self, concept): diff --git a/config/base.py b/config/base.py index 70ca94a..1010b8d 100644 --- a/config/base.py +++ b/config/base.py @@ -73,7 +73,8 @@ class LoopsOptions(Options): def parseContextOptions(self): def result(): - for opt in self.context.options: + options = getattr(self.context, 'options', []) + for opt in options: parts = opt.split(':', 1) key = parts[0].strip() if len(parts) == 1: @@ -94,3 +95,8 @@ class QueryOptions(LoopsOptions): adapts(IQueryConcept) + +class DummyOptions(Options): + + def __getitem__(self, key): + return [] diff --git a/configure.zcml b/configure.zcml index fb088c1..1511a81 100644 --- a/configure.zcml +++ b/configure.zcml @@ -183,9 +183,6 @@ - diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index 2d9b22552385c90a159bb179311937d67e0e8285..b2961210fff742c737d067f365e90ea0c6b4df2c 100644 GIT binary patch delta 3637 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 diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index 4049f2b..4d424a8 100644 --- a/locales/de/LC_MESSAGES/loops.po +++ b/locales/de/LC_MESSAGES/loops.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: $Id$\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 \n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -478,3 +478,18 @@ msgstr "Zielobjekt zuordnen" msgid "Search Term" msgstr "Suchbegriff" +msgid "Day" +msgstr "Tag" + +msgid "Start" +msgstr "Beginn" + +msgid "End" +msgstr "Ende" + +msgid "Duration" +msgstr "Dauer" + +msgid "Effort" +msgstr "Aufwand" + diff --git a/resource.py b/resource.py index 0cfe549..6ab2838 100644 --- a/resource.py +++ b/resource.py @@ -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 # it under the terms of the GNU General Public License as published by @@ -114,7 +114,7 @@ class Resource(Image, Contained): typePred = cm.getTypePredicate() if typePred is None: return None - concepts = self.getConcepts([typePred]) + concepts = self.getConcepts([typePred], noSecurityCheck=True) # TODO (?): check for multiple types (->Error) return concepts and concepts[0] or cm.get('file', None) def setResourceType(self, concept): diff --git a/security.zcml b/security.zcml index 000a95e..c53c138 100644 --- a/security.zcml +++ b/security.zcml @@ -15,26 +15,43 @@ id="loops.ManageSite" title="[loops-manage-site-permission] loops: Manage Site" /> + + + + + + + + + + +