2013-02-28 2 views

ответ

1

Это мой обходной путь. Это метод модели. Вы можете инкапсулировать его в 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 
1

Нечто подобное выглядит хорошо: https://github.com/lukaszb/django-guardian/blob/master/guardian/shortcuts.py#L214

>>> 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', '[email protected]', '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']} 
1

На самом деле есть ярлык для этого

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', '[email protected]', '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']} 
Смежные вопросы