【问题标题】:In django-guardian, how can I get all objects user has any permissions for在 django-guardian 中,我怎样才能让所有对象用户拥有任何权限
【发布时间】:2014-07-27 00:45:22
【问题描述】:

在 django-guardian 中,我怎样才能让用户拥有任何权限的所有对象(也可以通过组)。有一个shortcut to get all users having any permission over an object,但我正在搜索给定用户拥有任何权限的所有对象。

【问题讨论】:

    标签: django django-guardian


    【解决方案1】:

    get_objects_for_user()

    >>> from guardian.shortcuts import get_objects_for_user
    >>> joe = User.objects.get(username='joe')
    >>> get_objects_for_user(joe, 'auth.change_group')
    []
    
    >>> from guardian.shortcuts import assign_perm
    >>> group = Group.objects.create('some group')
    >>> assign_perm('auth.change_group', joe, group)
    >>> get_objects_for_user(joe, 'auth.change_group')
    [<Group some group>]
    

    对于任何权限,您可以自己在列表中键入代号,或使用get_perms_for_model()

    >>> group_perms = [perm.codename for perm in get_perms_for_model(Group)]
    >>> get_objects_for_user(joe, group_perms, klass=Group, any_perm=True)
    [<Group some group>]
    

    【讨论】:

    • 基于get_objects_for_user的代码,这似乎效率很低?
    • @Mitar 好吧...由于所有猜测该函数对内容类型等的作用,它非常复杂。此外,权限分为用户和组的 2 个表,它还需要ContentType 所以没有几个查询就无法完成。我怀疑你可以在不使用原始 SQL 的情况下改进查询。
    • 你可以,我提出了一个拉取请求:github.com/lukaszb/django-guardian/pull/247 (而不是进行一次查询来列出权限,然后将对象限制到这些权限,您只需删除权限过滤器。)
    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2023-02-09
    • 2018-06-25
    • 2011-07-20
    • 1970-01-01
    相关资源
    最近更新 更多