Django 规则重用谓词
Django rules re-using predicate
我创建了 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
您可以通过在 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
我创建了 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
您可以通过在 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