Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 金字塔认证系统的灵活性如何?_Python_Authorization_Acl_Pyramid - Fatal编程技术网

Python 金字塔认证系统的灵活性如何?

Python 金字塔认证系统的灵活性如何?,python,authorization,acl,pyramid,Python,Authorization,Acl,Pyramid,我在使用金字塔框架(很棒的框架)的时候,我的脚都湿了,我已经到了用户授权的地步。我想利用ACL阻止已经登录的用户访问注册页面。显然,我可以用其他的方法来做这件事,但我想知道是否有任何方法可以使用金字塔中的工具来做这件事 我知道,通过向视图添加权限,不符合条件的用户将显示禁止的视图。在我的例子中,我只想将已经是成员的用户从不适用于他们的视图(注册、登录等)中重新路由 我尝试了\uuuuacl\uuu=[(拒绝,认证,'guest')]但没有效果,因为它会阻止所有用户的登录页面 另外,在另一个方面,

我在使用金字塔框架(很棒的框架)的时候,我的脚都湿了,我已经到了用户授权的地步。我想利用ACL阻止已经登录的用户访问注册页面。显然,我可以用其他的方法来做这件事,但我想知道是否有任何方法可以使用金字塔中的工具来做这件事

我知道,通过向视图添加权限,不符合条件的用户将显示禁止的视图。在我的例子中,我只想将已经是成员的用户从不适用于他们的视图(注册、登录等)中重新路由

我尝试了
\uuuuacl\uuu=[(拒绝,认证,'guest')]
但没有效果,因为它会阻止所有用户的登录页面


另外,在另一个方面,是否有任何方法可以动态更改路由。我希望登录用户的主页与来宾的主页不同。

您需要调查身份验证策略返回的主体,以了解发生了什么。如果在INI文件中打开
pyramid.debug\u authorization
,很容易判断。授权策略将把找到的ACL与通过
pyramid.security.effective\u主体(请求)
返回的主体进行比较。如果这些不匹配,应该清楚发生了什么

实现基于表单登录的方法是(假设Pyramid 1.3a9+):


这将把
come\u from
参数作为
request添加到URL中。在登录视图中获取['come\u from']
。当然,如果没有,您可以在登录后将它们重定向到主屏幕。

Pyramid的身份验证系统非常灵活,这就是为什么很难让您绞尽脑汁的原因。我不能从ACL的一个片段中真正告诉你你做错了什么,但我可以告诉你,如果你打开
pyramid.debug\u authentication
,它将帮助你知道从你的身份验证策略返回了哪些主体。谢谢Michael。所以我假设我写的片段确实朝着正确的方向前进了?还有,当调用禁止视图时,有没有办法获得调用的初始请求,以便我可以相应地采取行动并重定向到正确的页面?我添加了一个答案,可以解决您的问题。对不起,Michael,但是我设置的acl仍然不起作用,我也不知道为什么。调试信息显示:
Debug\u url的授权http://localhost:6543/register (根据上下文查看名称u”):通过主体['system.Everyone']上下文上ACL[('Allow','system.Authenticated','member'),('Deny','system.Authenticated','guest')中的ACE''ACLDenied权限“guest”
代码为:
\uU ACL\uu=[(Allow,Authenticated,'member'),(Deny,Authenticated,'guest')]
当我使用guest权限
@view\u配置(route\u name='register',renderer='register.mako',permission='guest')
时,我会得到误报(阻止未经身份验证的用户注册)。您在哪里允许未经身份验证的用户使用“来宾”权限?在
拒绝
之后,我看不到您在哪里使用
(允许所有人使用“来宾”)
from pyramid.httpexceptions import HTTPSeeOther
from pyramid.security import authenticated_userid
from pyramid.view import forbidden_view_config

@forbidden_view_config()
def forbidden_view(request):
    if authenticated_userid(request):
        # user is already logged in, they are really forbidden
        return request.context # the forbidden 403 response

    url = request.route_url('login', _query={'came_from': request.path})
    return HTTPSeeOther(url)