Django中的对象级别级联权限

Ton*_*ony 5 python django permissions cascade

诸如Django-guardian和django-permissions之类的项目使您能够拥有对象级权限。但是,如果两个对象之间通过父子关系相互关联,则除非另有说明,否则子对象有什么方法可以继承父对象的许可?例如,除非用户为子文件夹明确分配了不同的权限,否则a subfolder应该继承权限parent folder

使用Django(尤其是Django-guardian模块)完成此操作的最佳方法是什么?

jpi*_*pic 4

当您检查用户是否拥有某个对象的权限或没有权限时,您可以检查该用户是否拥有其父对象的权限。

您甚至可能想创建自己的函数,例如:

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
Run Code Online (Sandbox Code Playgroud)

这应该遍历父级,直到找到父级的许可或返回 False。