如何在 django Guardian 中获取对象具有特定权限的所有用户?

Nat*_*tim 7 django-permissions django-guardian

from guardian.shortcuts import get_objects_for_user
Run Code Online (Sandbox Code Playgroud)

但是关于

from guardian.shortcuts import get_users_for_object
Run Code Online (Sandbox Code Playgroud)

谢谢。

Jav*_*pos 9

其实有一个捷径

http://django-guardian.readthedocs.io/en/stable/api/guardian.shortcuts.html#get-users-with-perms

>>> from django.contrib.flatpages.models import FlatPage
>>> from django.contrib.auth.models import User
>>> from guardian.shortcuts import assign_perm, get_users_with_perms
>>>
>>> page = FlatPage.objects.create(title='Some page', path='/some/page/')
>>> joe = User.objects.create_user('joe', 'joe@example.com', 'joesecret')
>>> assign_perm('change_flatpage', joe, page)
>>>
>>> get_users_with_perms(page)
[<User: joe>]
>>>
>>> get_users_with_perms(page, attach_perms=True)
{<User: joe>: [u'change_flatpage']}
Run Code Online (Sandbox Code Playgroud)


Lor*_*ABA 2

这是我的解决方法。这就是模型方法。您可以将其封装在 mixin 中。

def get_users_with_perm(self, permission):
    '''
    Returns list of users(worn:not QuerySet) with specific permission for this object
    :param permission: permission string
    '''

    anyperm = get_users_with_perms(self, attach_perms=True)
    result = []
    for user, perms in anyperm.iteritems():
        if permission in perms: result.append(user)
    return result
Run Code Online (Sandbox Code Playgroud)