我想允许未认证用户的权限,但拒绝已认证用户的权限。

# works
__acl__ = [
    (Deny, Authenticated, 'something'),
    (Allow, Everyone, 'something'),
]

# order changed -- DOES NOT WORK
__acl__ = [
    (Allow, Everyone, 'something'),
    (Deny, Authenticated, 'something'),
]


我的问题是:这是从经过身份验证的用户中筛选出未经身份验证的用户的正确方法吗?在金字塔中是否有更明确的方法可以做到这一点?我如何说出NonAuthenticated(即Everyone - Authenticated)来描绘未经身份验证的用户。

一个更笼统的问题是:我们应该如何过滤一组用户而不是另一组用户?

最佳答案

AuthenticatedEveryone是主体(实际上,它们只是字符串)。每个用户都有一个主体列表(默认情况下,已验证用户使用[username, Authenticated, Everyone],其他用户使用[Everyone])。您无法对主体进行合奏操作,因此无法定义根据NonAuthenticatedEveryone计算出的Authenticated

您可以做的是使用ACL的顺序来声明所需的内容。 documentation提到ACL是按顺序处理的,与用户主体匹配的第一个是user。因此,如果您要授予组A中的用户的访问权限(除非他们位于组B中)(主体“ group:A”而不是“ group:B”),则可以编写。

__acl__ = [
    (Deny, 'group:B', 'something'),   # If user in B, deny
    (Allow, 'group:A', 'something'),  # Else (=if user not in B), if user in A, allow
    (Deny, Everyone, 'something'),    # Else, Deny
]

关于python - Pyramid :ACL中的ACE顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15565024/

10-12 23:10