首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >金字塔/Websauna的不一致ACL许可

金字塔/Websauna的不一致ACL许可
EN

Stack Overflow用户
提问于 2020-10-23 19:41:13
回答 1查看 57关注 0票数 1

我正在对Websauna上的is_visible方法进行故障排除,因为它不能正常工作(至少对我来说是这样)。该文件可以找到这里

问题是,看起来ACL上下文突然与上面显示的一行发生了变化。下面是带有打印日志的方法。

代码语言:javascript
复制
def is_visible(self, context: Resource, request: Request) -> bool:
    """Determine if we should render this button.

    :param context: Traversal context
    :param request: Current HTTP Request.
    :returns: Boolean indicating if button is visible or not.
    """
    visible = True
    if self.permission is not None:
        print(context, '&' , self.permission)
        print('******CONTEXT & PERMISSION')
        print(context.__acl__)
        print('******+++++++CONTEXT ACL')
        print(request.has_permission(self.permission, context))
        print('-------------HAS PERMISSION EVAL')
        if not request.has_permission(self.permission, context):
            visible = False

    if self.feature is not None:
        if self.feature not in request.registry.features:
            visible = False

    return visible

下面的日志显示了context在拒绝访问时如何显示与has_permission()引用的值不同的值。

下面日志中的前两行显示了对resolve_custom_principals的调用,这是校长的一个副本,但是用我自己的ACE(如(Allow, "mygroup:admin", "add"))进行了扩展.

读取日志时,上面一行的上下文具有正确的acl,包括自定义ACEs。为什么在下一行检查权限时使用不同的上下文?在本例中,它返回ACLDenied。

代码语言:javascript
复制
[11:13:01] [websauna.myaddon.auth.principals resolve_custom_principals] ['system.Authenticated', 'user:74', 'mygroup:admin', 'mygroup:manager', 'team_member:1']
[11:13:01] [websauna.myaddon.auth.principals resolve_custom_principals] ['system.Authenticated', 'user:74', 'mygroup:admin', 'mygroup:manager', 'team_member:1']
<websauna.myaddon.crud.org.OrgResource object at 0x7fa021f883c8> & add
******CONTEXT & PERMISSION
[('Allow', 'mygroup:admin', 'add'), ('Allow', 'mygroup:manager', 'add'), ('Allow', 'mygroup:senior', 'add'), ('Allow', 'mygroup:assistant', 'add'), ('Deny', 'mygroup:legcle', 'add'), ('Deny', 'mygroup:clerk', 'add'), ('Deny', 'mygroup:intern', 'add'), ('Allow', 'mygroup:admin', 'edit'), ('Allow', 'mygroup:manager', 'edit')]
******+++++++CONTEXT ACL
ACLDenied permission 'add' via ACE '<default deny>' in ACL [('Allow', 'system.Authenticated', 'authenticated'), ('Allow', 'superuser:superuser', 'shell'), ('Allow', 'system.Everyone', 'view')] on context <websauna.myaddon.crud.org.OrgResource object at 0x7fa021f883c8> for principals ['system.Everyone', 'system.Authenticated', 74, 'system.Authenticated', 'user:74']
-------------HAS PERMISSION EVAL
<websauna.myaddon.crud.org.OrgResource object at 0x7fa021f883c8> & add
******CONTEXT & PERMISSION
[('Allow', 'mygroup:admin', 'add'), ('Allow', 'mygroup:manager', 'add'), ('Allow', 'mygroup:senior', 'add'), ('Allow', 'mygroup:assistant', 'add'), ('Deny', 'mygroup:legcle', 'add'), ('Deny', 'mygroup:clerk', 'add'), ('Deny', 'mygroup:intern', 'add'), ('Allow', 'mygroup:admin', 'edit'), ('Allow', 'mygroup:manager', 'edit')]
******+++++++CONTEXT ACL
ACLDenied permission 'add' via ACE '<default deny>' in ACL [('Allow', 'system.Authenticated', 'authenticated'), ('Allow', 'superuser:superuser', 'shell'), ('Allow', 'system.Everyone', 'view')] on context <websauna.myaddon.crud.org.OrgResource object at 0x7fa021f883c8> for principals ['system.Everyone', 'system.Authenticated', 74, 'system.Authenticated', 'user:74']
-------------HAS PERMISSION EVAL
[11:13:01] [websauna.system.core.session create_session] Skipped session creation for http://localhost:6543/websauna-static/bootstrap.min.css

如果你需要更多的信息,或者我如何使问题更清楚,请告诉我。

更新1:视图模板中调用is_visible函数以确定要呈现哪个按钮。在我的例子中,它没有显示按钮,但是在上下文中设置了权限。

代码语言:javascript
复制
<div id="crud-page-buttons" class="header-resources">
    {% for button in resource_buttons %}
        {% if button.is_visible(context, request) %}
            {{ button.render(context, request)|safe }}
        {% endif %}
    {% endfor %}
</div>

更新2:

我在用:

金字塔1.10.4

网上桑拿1.0a13

EN

回答 1

Stack Overflow用户

发布于 2020-12-10 19:50:22

我怀疑websauna不是在调用您的resolve_custom_principals函数,而是在使用它的默认resolve_principals函数?我认为很明显,在调用has_permission时引入的主体不是来自您的resolve_custom_principals函数的主体,因此有些东西没有与此覆盖正确地连接起来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64506344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档