django-guardian 如何让对象继承相关对象的权限?

Lor*_*ABA 5 python django permissions django-guardian

我有两个模型:

class ContactGroup(models.Model):
    name = models.CharField(max_length=40)
    class Meta:
        permissions=(('view_group_contacts', 'View contacts from group'))


class Contact(models.Model):
    name = models.CharField(max_length=40)
    group = models.ForeignKey(ContactGroup)
    class Meta:
        permissions=(('view_contact', 'View contact'))        
Run Code Online (Sandbox Code Playgroud)

例如,当我在执行`get_objects_for_user(User, 'appname.view_contact) 但仍然保留更改单个联系人权限的选项时,如何让 django 监护人考虑 ContactGroup 权限?(不排除,仅授予查看单个联系人的权限当用户没有整个组的权限时)

luk*_*szb 2

抱歉,django-guardian 不支持这种行为。至于has_perm- 将其用于查询集效率极低,因为我们需要对表中的每一行执行 >=1 查询。

但是,您可以首先执行get_objects_for_userfor ContactGroup,然后执行 forContact并使用第一个查询集的结果扩展最后一个查询集。就像是:

contact_groups = get_objects_for_user(user, 'appname.view_group_contacts', ContactGroup)
contacts = get_objects_for_user(user, 'appname.view_contact', Contact)
Run Code Online (Sandbox Code Playgroud)

合并这些仍然存在问题,但这是可能的。