From 0f332842b52414d5a6fd2ef2fa0e23c81ec928ed Mon Sep 17 00:00:00 2001 From: helmutm Date: Mon, 28 Feb 2011 11:14:16 +0000 Subject: [PATCH] provide login screen within end-user page layout (if site is accessible for Anonymous) git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@4193 fd906abe-77d9-0310-91a1-e0d9ade77398 --- browser/auth.pt | 42 +++++++++++++ browser/auth.py | 61 ++++++++++++++++++ browser/configure.zcml | 136 ++++++++++++++++------------------------- 3 files changed, 154 insertions(+), 85 deletions(-) create mode 100644 browser/auth.pt create mode 100644 browser/auth.py diff --git a/browser/auth.pt b/browser/auth.pt new file mode 100644 index 0000000..06fcb22 --- /dev/null +++ b/browser/auth.pt @@ -0,0 +1,42 @@ + + + +

Login

+
+

+ Please provide Login Information

+

+ You are not authorized to perform this action. However, you may login as a + different user who is authorized.

+
+ + + + +
+
User Name
+
+
+

+
+
Password
+
+
+

+
+
+ +
+
+
+
diff --git a/browser/auth.py b/browser/auth.py new file mode 100644 index 0000000..71d9dd9 --- /dev/null +++ b/browser/auth.py @@ -0,0 +1,61 @@ +# +# Copyright (c) 2011 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 +# + +""" +$Id$ +""" + +from zope.app.security.interfaces import IAuthentication +from zope.app.security.interfaces import ILogout, IUnauthenticatedPrincipal +from zope import component +from zope.interface import implements + +from loops.browser.node import NodeView +from zope.app.pagetemplate import ViewPageTemplateFile +from zope.cachedescriptors.property import Lazy + + +class LoginForm(NodeView): + + template = ViewPageTemplateFile('auth.pt') + + @Lazy + def macro(self): + return self.template.macros['login_form'] + + @Lazy + def item(self): + return self + + +class Logout(object): + + implements(ILogout) + + def __init__(self, context, request): + self.context = context + self.request = request + + def __call__(self): + nextUrl = self.request.get('nextURL') or self.request.URL[-1] + if not IUnauthenticatedPrincipal.providedBy(self.request.principal): + auth = component.getUtility(IAuthentication) + ILogout(auth).logout(self.request) + return self.request.response.redirect(nextUrl) + + diff --git a/browser/configure.zcml b/browser/configure.zcml index 2507a7e..e46fbcf 100644 --- a/browser/configure.zcml +++ b/browser/configure.zcml @@ -24,14 +24,19 @@ + permission="zope.Public" /> - + + + + + @@ -40,43 +45,37 @@ name="loops_macros" permission="zope.View" class=".macros.Macros" - allowed_interface="zope.interface.common.mapping.IItemMapping" - /> + allowed_interface="zope.interface.common.mapping.IItemMapping" /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.View" /> @@ -181,14 +180,12 @@ + menu="zmi_views" title="Related Concepts" /> + menu="zmi_views" title="Resources" /> @@ -197,8 +194,7 @@ for="loops.interfaces.IConcept" class="loops.browser.concept.ConceptEditForm" permission="zope.ManageContent" - menu="zmi_views" title="Edit" - /> + menu="zmi_views" title="Edit" /> + menu="zmi_views" title="View" /> + permission="zope.View" /> + name="concept.html" /> + permission="zope.View" /> + permission="zope.View" /> @@ -283,8 +274,7 @@ zope.publisher.interfaces.browser.IBrowserRequest" provides="zope.interface.Interface" factory="loops.browser.resource.ResourceView" - permission="zope.View" - /> + permission="zope.View" /> + menu="zmi_views" title="Configure" /> @@ -304,15 +293,13 @@ for="loops.interfaces.IResource" class="loops.browser.resource.ResourceEditForm" permission="zope.ManageContent" - menu="zmi_views" title="Edit" - /> + menu="zmi_views" title="Edit" /> + filter="nothing" /> @@ -328,8 +315,7 @@ for="loops.interfaces.IDocument" class="loops.browser.resource.DocumentEditForm" permission="zope.ManageContent" - menu="zmi_views" title="Edit" - /> + menu="zmi_views" title="Edit" /> + menu="zmi_views" title="View" /> + permission="zope.View" /> + permission="zope.View" /> @@ -547,71 +530,61 @@ name="object_info.html" for="loops.interfaces.INode" class="loops.browser.node.ObjectInfo" - permission="zope.View" - /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.ManageContent" /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.View" /> + permission="zope.ManageContent" /> @@ -712,23 +683,20 @@ schema="loops.interfaces.IViewConfiguratorSchema" for="loops.interfaces.INode" template="edit.pt" - permission="zope.ManageContent" - /> + permission="zope.ManageContent" /> + filter="python: context.nodeType == 'menu'" /> + provides="cybertools.browser.configurator.IViewConfigurator" /> @@ -737,16 +705,14 @@ for="loops.interfaces.ILoops" class="loops.setup.SetupView" attribute="setupLoopsSite" - permission="zope.ManageSite" - /> + permission="zope.ManageSite" /> + permission="zope.ManageSite" />