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
This commit is contained in:
helmutm 2011-02-28 11:14:16 +00:00
parent d3d6e2b7ef
commit 0f332842b5
3 changed files with 154 additions and 85 deletions

42
browser/auth.pt Normal file
View file

@ -0,0 +1,42 @@
<!-- $Id$ -->
<metal:login define-macro="login_form"
i18n:domain="zope"
tal:define="principal request/principal/id">
<h2>Login</h2>
<div>
<p i18n:translate=""
tal:condition="python: principal == 'zope.anybody'">
Please provide Login Information</p>
<p i18n:translate=""
tal:condition="python: principal != 'zope.anybody'">
You are not authorized to perform this action. However, you may login as a
different user who is authorized.</p>
<form method="post"
tal:define="submitted python:
principal != 'zope.anybody' and 'SUBMIT' in request">
<tal:redirect condition="submitted">
<span tal:define="dummy python:request.response.redirect(
request.get('camefrom') or request.URL[-1])" />
</tal:redirect>
<tal:form condition="not:submitted">
<div class="row">
<div class="label" i18n:translate="">User Name</div>
<div class="field">
<input type="text" name="login"/></div>
</div><br />
<div class="row">
<div class="label" i18n:translate="">Password</div>
<div class="field">
<input type="password" name="password"/></div>
</div><br />
<div class="row">
<input class="form-element" type="submit"
name="SUBMIT" value="Log in"
i18n:attributes="value login-button" /></div>
<input type="hidden" name="camefrom"
tal:attributes="value request/camefrom | nothing">
</tal:form>
</form>
</div>
</metal:login>

61
browser/auth.py Normal file
View file

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

View file

@ -24,14 +24,19 @@
<page for="loops.interfaces.INode"
name="index.html"
class="loops.browser.node.NodeView"
permission="zope.Public"
/>
permission="zope.Public" />
<!--<page for="loops.interfaces.INode"
name="main.html"
class="loops.browser.node.NodeView"
permission="zope.Public"
/>-->
<!-- login/logout -->
<page for="loops.interfaces.ILoopsObject"
name="login.html"
class="loops.browser.auth.LoginForm"
permission="zope.View" />
<page for="loops.interfaces.ILoopsObject"
name="logout.html"
class="loops.browser.auth.Logout"
permission="zope.View" />
<!-- macros -->
@ -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" />
<page
for="*"
name="node_macros"
template="node_macros.pt"
permission="zope.View"
/>
permission="zope.View" />
<page
for="*"
name="concept_macros"
template="concept_macros.pt"
permission="zope.View"
/>
permission="zope.View" />
<page
for="*"
name="relation_macros"
template="relation_macros.pt"
permission="zope.View"
/>
permission="zope.View" />
<page
for="*"
name="target_macros"
template="target_macros.pt"
permission="zope.View"
/>
permission="zope.View" />
<page
for="*"
name="resource_macros"
template="resource_macros.pt"
permission="zope.View"
/>
permission="zope.View" />
<!-- named templates - forms and macro templates -->
@ -181,14 +180,12 @@
<page
name="configure.html"
template="concept_related.pt"
menu="zmi_views" title="Related Concepts"
/>
menu="zmi_views" title="Related Concepts" />
<page
name="resources.html"
template="concept_resources.pt"
menu="zmi_views" title="Resources"
/>
menu="zmi_views" title="Resources" />
</pages>
@ -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" />
<page
name="concept.html"
@ -206,29 +202,25 @@
class=".concept.ConceptView"
template="concept.pt"
permission="zope.View"
menu="zmi_views" title="View"
/>
menu="zmi_views" title="View" />
<page
name="index.html"
for="loops.interfaces.IConcept"
class=".concept.ConceptView"
template="concept.pt"
permission="zope.View"
/>
permission="zope.View" />
<defaultView
for="loops.interfaces.IConcept"
name="concept.html"
/>
name="concept.html" />
<zope:adapter
for="loops.interfaces.IConcept
zope.publisher.interfaces.browser.IBrowserRequest"
provides="zope.interface.Interface"
factory="loops.browser.concept.ConceptView"
permission="zope.View"
/>
permission="zope.View" />
<zope:adapter
name="folder.html"
@ -236,8 +228,7 @@
zope.publisher.interfaces.browser.IBrowserRequest"
provides="zope.interface.Interface"
factory="loops.browser.folder.FolderView"
permission="zope.View"
/>
permission="zope.View" />
<!-- resource manager -->
@ -283,8 +274,7 @@
zope.publisher.interfaces.browser.IBrowserRequest"
provides="zope.interface.Interface"
factory="loops.browser.resource.ResourceView"
permission="zope.View"
/>
permission="zope.View" />
<pages
for="loops.interfaces.IResource"
@ -294,8 +284,7 @@
<page
name="configure.html"
template="resource_configure.pt"
menu="zmi_views" title="Configure"
/>
menu="zmi_views" title="Configure" />
</pages>
@ -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" />
<!-- suppress the upload menu item: -->
<menuItem
for="loops.interfaces.IResource"
menu="zmi_views" action="upload.html" title="Upload"
filter="nothing"
/>
filter="nothing" />
<!-- document -->
@ -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" />
<page
for="loops.interfaces.IResource"
@ -342,16 +328,14 @@
for="loops.interfaces.IDocument"
action="document.html"
permission="zope.View"
menu="zmi_views" title="View"
/>
menu="zmi_views" title="View" />
<zope:adapter
for="loops.interfaces.IDocument
zope.publisher.interfaces.browser.IBrowserRequest"
provides="zope.interface.Interface"
factory="loops.browser.resource.DocumentView"
permission="zope.View"
/>
permission="zope.View" />
<zope:adapter
name="note.html"
@ -359,8 +343,7 @@
zope.publisher.interfaces.browser.IBrowserRequest"
provides="zope.interface.Interface"
factory="loops.browser.resource.NoteView"
permission="zope.View"
/>
permission="zope.View" />
<!-- view manager -->
@ -547,71 +530,61 @@
name="object_info.html"
for="loops.interfaces.INode"
class="loops.browser.node.ObjectInfo"
permission="zope.View"
/>
permission="zope.View" />
<page
name="create_object.html"
for="loops.interfaces.INode"
class="loops.browser.form.CreateObjectForm"
permission="zope.View"
/>
permission="zope.View" />
<page
name="create_object_popup.html"
for="loops.interfaces.INode"
class="loops.browser.form.CreateObjectPopup"
permission="zope.ManageContent"
/>
permission="zope.ManageContent" />
<page
name="edit_object.html"
for="loops.interfaces.INode"
class="loops.browser.form.EditObjectForm"
permission="zope.View"
/>
permission="zope.View" />
<page
name="create_concept.html"
for="loops.interfaces.INode"
class="loops.browser.form.CreateConceptForm"
permission="zope.View"
/>
permission="zope.View" />
<page
name="edit_concept.html"
for="loops.interfaces.INode"
class="loops.browser.form.EditConceptForm"
permission="zope.View"
/>
permission="zope.View" />
<page
name="edit_concept_page.html"
for="loops.interfaces.INode"
class="loops.browser.form.EditConceptPage"
permission="zope.View"
/>
permission="zope.View" />
<page
name="inner_form.html"
for="loops.interfaces.INode"
class="loops.browser.form.InnerForm"
permission="zope.View"
/>
permission="zope.View" />
<page
name="inner_concept_form.html"
for="loops.interfaces.INode"
class="loops.browser.form.InnerConceptForm"
permission="zope.View"
/>
permission="zope.View" />
<page
name="inner_concept_edit_form.html"
for="loops.interfaces.INode"
class="loops.browser.form.InnerConceptEditForm"
permission="zope.View"
/>
permission="zope.View" />
<zope:adapter
name="create_resource"
@ -649,16 +622,14 @@
name="inline_edit.html"
for="loops.interfaces.INode"
class="loops.browser.node.InlineEdit"
permission="zope.View"
/>
permission="zope.View" />
<page
name="inline_save"
for="loops.interfaces.INode"
class="loops.browser.node.InlineEdit"
attribute="save"
permission="zope.ManageContent"
/>
permission="zope.ManageContent" />
<!-- render file or image assigned to a node as target -->
@ -712,23 +683,20 @@
schema="loops.interfaces.IViewConfiguratorSchema"
for="loops.interfaces.INode"
template="edit.pt"
permission="zope.ManageContent"
/>
permission="zope.ManageContent" />
<menuItem
for="loops.interfaces.INode"
action="viewconfigure.html"
permission="zope.ManageContent"
menu="zmi_views" title="View Properties"
filter="python: context.nodeType == 'menu'"
/>
filter="python: context.nodeType == 'menu'" />
<zope:adapter
factory="loops.browser.node.NodeViewConfigurator"
for="loops.interfaces.INode
zope.publisher.interfaces.browser.IBrowserRequest"
provides="cybertools.browser.configurator.IViewConfigurator"
/>
provides="cybertools.browser.configurator.IViewConfigurator" />
<!-- manual setup action(s) -->
@ -737,16 +705,14 @@
for="loops.interfaces.ILoops"
class="loops.setup.SetupView"
attribute="setupLoopsSite"
permission="zope.ManageSite"
/>
permission="zope.ManageSite" />
<page
name="cleanup_relations"
for="loops.interfaces.ILoops"
class="loops.browser.manager.CleanupRelations"
attribute="cleanup"
permission="zope.ManageSite"
/>
permission="zope.ManageSite" />
<include package=".skin" />
<include package=".lobo" />