4

我创建了 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()必须can_edit_items()通过传入单个字符串来使用field_1

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

@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
4

1 回答 1

3

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

我有点不确定更广泛的要求,但也许这可能会奏效

def can_edit_specific_item(*field):
    @rules.predicate
    def predicate(user):
        return can_edit_items(user, field)
    return predicate
于 2020-07-26T16:29:26.397 回答