gpt4 book ai didi

security - 在 Pyramid 中,您可以在类和该类的实例上都拥有 ACL

转载 作者:行者123 更新时间:2023-12-03 06:31:03 26 4
gpt4 key购买 nike

在 Pyramid 应用程序中,我有一些资源对象,它们也是 SQLAlchemy ORM 对象。对于这些对象,我需要在类型级别(即类级别)表达一些权限,通常可以这样做(将 acl 指定为类字段):

class MyModelClass(Base):
__acl__ = []

但是,我还有一些权限,其内容需要在加载 ORM 类后在运行时计算,通常可以这样做(将 acl 指定为实例上的可调用项):

class MyModelClass(Base):
def __acl__(self):
return my_dynamic_acl

我的问题是我想为同一个类(class)做这两件事,这可能吗?如果我按原样混合上述两者,可调用对象会隐藏类字段,因此这将不起作用。

我想要在类和实例级别指定权限的原因是我有一些无法访问模型对象的操作(例如“new”),因此相应的路由工厂将是提供 MyObject 的 class (并且类级别 acl 是我想要生效的级别);我还有其他操作对 MyObject 实例进行操作(这些操作需要动态计算,因此不能在类字段 acl 中声明),对于这些操作,我将拥有路由工厂返回 MyObject 的实例,在本例中,我希望 Pyramid 能够看到在该实例上创建的acl

迈克尔

最佳答案

您需要手动将默认 acl 与动态 acl 合并。这需要在代码中添加更多的框架才能正常工作,但并不是太难。

class MyModelClass(Base):
__default_acl__ = []
__acl__ = __default_acl__ # helpful if you're doing this on a base class

def __acl__(self): # overrides the base class' __acl__ attribute with a dynamic one
dynamic_acl = []
return self.__default_acl__ + dynamic_acl

关于security - 在 Pyramid 中,您可以在类和该类的实例上都拥有 ACL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42926372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com