【问题标题】:Object level cascading permission in DjangoDjango中的对象级级联权限
【发布时间】:2012-06-14 02:03:06
【问题描述】:

Django-guardian 和 django-permissions 等项目使您能够拥有对象级别的权限。但是,如果两个对象通过父子关系相互关联,那么除非另有说明,否则子对象有没有办法从父对象继承权限?例如,subfolder 应该从 parent folder 继承权限,除非用户明确为子文件夹分配不同的权限。

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

【问题讨论】:

    标签: python django permissions cascade


    【解决方案1】:

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

    您甚至可能想制作自己的函数,例如:

    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。

    【讨论】:

    • 这行不通。你怎么知道权限是否是自动生成的,如果父母权限发生变化你应该改变它们?
    • 对,我不是很喜欢它,答案是用更简单的方式更新的。感谢您的反馈。
    • 有道理。放置这种方法的最佳位置在哪里?此外,由于递归权限检查是在代码中完成的,如何在数据库中查询用户有权访问的所有对象的列表?
    • "在哪里放置这样的方法最好?"没关系。就我个人而言,我喜欢制作一个 project_specific 应用程序,我将我的项目特定的 sn-ps 放在其中。 “如何在数据库中查询用户有权访问的所有对象的列表?”使用get_objects_for_user
    • 问题是因为现在可以继承权限,所以get_objects_for_user方法已经不够用了,因为它没有考虑到继承的权限。
    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 2017-07-12
    • 2014-01-10
    • 2016-03-26
    • 2017-10-16
    • 2012-08-07
    • 2017-05-04
    相关资源
    最近更新 更多