2014-07-27 3 views
1

django-guardian에서 모든 객체 사용자에게 (그룹을 통해서도) 모든 권한을 부여하려면 어떻게해야합니까? shortcut to get all users having any permission over an object이 있지만 주어진 사용자가 권한을 가지고있는 모든 개체를 검색하고 있습니다. 당신이 목록에서 자신을 코드 네임을 입력하거나 get_perms_for_model()를 사용할 수 어떤 허가를django-guardian에서 모든 객체에 대한 사용자 권한을 얻는 방법

>>> 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>] 

답변

1

get_objects_for_user().

>>> 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>] 
+0

'get_objects_for_user' 코드를 기반으로하면 이것은 비효율적 인 것처럼 보입니까? – Mitar

+0

@Mitar 음 ... 함수가 콘텐츠 형식 등으로하는 모든 추측으로 인해 꽤 복잡합니다. 또한 사용 권한은 사용자 및 그룹에 대해 2 개의 테이블로 나누어지며 ContentType도 필요하므로 사용할 수 없습니다. 몇 가지 쿼리없이 완료되었습니다. 원시 SQL을 사용하지 않고도 쿼리를 향상시킬 수 있을지는 의문입니다. –

+0

https://github.com/lukaszb/django-guardian/pull/247 권한 요청을 나열한 다음 개체를 해당 개체로 제한하는 대신 사용 권한에 대한 필터를 제거하면됩니다 (https://github.com/lukaszb/django-guardian/pull/247). .) – Mitar