【问题标题】:Django rules re-using predicateDjango 规则重用谓词
【发布时间】:2020-11-16 00:56:03
【问题描述】:

我创建了 2 个谓词,它们在本质上非常相似。一个消耗一个列表,另一个消耗一个静态字符串。

@rules.predicate
def can_edit_items(user, fields):
    for perm in user.groups.all()
        if perm.name not in settings.fields[fields]
            return False
    return True

@rules.predicate
def can_edit_specific_item(user, field):
    for perm in user.groups.all()
        if perm.name not in settings.fields[field]
            return False
    return True

我的要求是can_edit_specific_item() 必须通过传入单个字符串field_1 来使用can_edit_items()

我已尝试创建以下变体,但它似乎没有按我的预期工作

@rules.predicate
def can_edit_specific_item(user, field):
    for perm in user.groups.all()
        if perm.name not in can_edit_items[field]
            return False
    return True

【问题讨论】:

    标签: python python-3.x django web django-rules


    【解决方案1】:

    您可以通过在can_edit_specific_item 中设置@rules.predicate 并将其作为函数返回来定义can_edit_specific_item,只需传入您的必填字段。

    我对更广泛的要求有点不确定,但也许这可以解决问题

    def can_edit_specific_item(*field):
        @rules.predicate
        def predicate(user):
            return can_edit_items(user, field)
        return predicate
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      相关资源
      最近更新 更多