Django中的对象级别级联权限

时间:2012-06-11 06:43:50

标签: python django permissions cascade

Django-guardian和django-permissions等项目使您可以拥有对象级权限。但是,如果两个对象通过父子关系彼此相关,除非另有说明,否则子对象是否有任何方式可以从父对象继承权限?例如,subfolder应继承parent folder的权限,除非用户明确为子文件夹分配了不同的权限。

使用Django,特别是Django-guardian模块实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

当您检查用户是否对某个对象具有权限时,您可以检查它是否具有对其父对象的权限。

您甚至可能想要创建自己的功能,例如:

def your_has_perm(user, perm, obj):
    has = user.has_perm(perm, obj)

    if not has and hasattr(obj, 'parent'):
        return your_has_perm(user, perm, obj.parent)

    return has

这应该遍历父母,直到找到父母的权限或返回False。