得到所有用户的列表与特定权限组我想所有的Django auth用户的列表与特定的权限组,这样的事情:如何在Django
user_dict = {
'queryset': User.objects.filter(permisson='blogger')
}
我查不到这个怎么做。在用户模型中如何保存权限组?
得到所有用户的列表与特定权限组我想所有的Django auth用户的列表与特定的权限组,这样的事情:如何在Django
user_dict = {
'queryset': User.objects.filter(permisson='blogger')
}
我查不到这个怎么做。在用户模型中如何保存权限组?
,看看这个变种:
这将是最简单
from django.contrib.auth import models
group = models.Group.objects.get(name='blogger')
users = group.user_set.all()
我觉得对组的权限,权限是对存储组,然后用户可以链接到他们组。所以你可以解决用户组关系。
例如
518$ python manage.py shell
(InteractiveConsole)
>>> from django.contrib.auth.models import User, Group
>>> User.objects.filter(groups__name='monkeys')
[<User: cms>, <User: dewey>]
谢谢,修复它,我知道应该很简单。唯一的问题是,如果组名改变了,也许我应该过滤ID或其他东西... 但是,谢谢! – espenhogbakk 2008-12-18 21:19:04
组与用户(你看,没有什么不寻常的,只是Django模型...)是多对多的,所以cms的答案是正确的。此外,这两种方式都有效:拥有一个组,您可以通过检查user_set
属性列出其中的所有用户。如果你想获得通过权限的用户列表
User.objects.filter(groups__permissions = Permission.objects.get(codename='blogger'))
试试这个
from django.contrib.auth.models import User, Permission
from django.db.models import Q
perm = Permission.objects.get(codename='blogger')
users = User.objects.filter(Q(groups__permissions=perm) | Q(user_permissions=perm)).distinct()
基于@ Glader的答案,这个功能包装起来的单一的查询,并已被修改,以算法中获得超级用户(通过定义,他们都烫发):基于@Aug
from django.contrib.auth.models import User
from django.db.models import Q
def users_with_perm(perm_name):
return User.objects.filter(
Q(is_superuser=True) |
Q(user_permissions__codename=perm_name) |
Q(groups__permissions__codename=perm_name)).distinct()
# Example:
queryset = users_with_perm('blogger')
usto的回答是,我使用模型管理器并使用authtools库进行了以下操作。这是querysets.py
:
from django.db.models import Q
from authtools.models import UserManager as AuthUserManager
class UserManager(AuthUserManager):
def get_users_with_perm(self, perm_name):
return self.filter(
Q(user_permissions__codename=perm_name) |
Q(groups__permissions__codename=perm_name)).distinct()
然后在models.py
:
from django.db import models
from authtools.models import AbstractEmailUser
from .querysets import UserManager
class User(AbstractEmailUser):
objects = UserManager()
不要忘了指定权限的代号是不够的,因为不同的应用程序可以重复使用相同的代号。人们需要获得许可对象要正确查询用户:
def get_permission_object(permission_str):
app_label, codename = permission_str.split('.')
return Permission.objects.filter(content_type__app_label=app_label, codename=codename).first()
def get_users_with_permission(permission_str, include_su=True):
permission_obj = get_permission_object(permission_str)
q = Q(groups__permissions=permission_obj) | Q(user_permissions=permission_obj)
if include_su:
q |= Q(is_superuser=True)
return User.objects.filter(q).distinct()
代码进口: https://github.com/Dmitri-Sintsov/django-jinja-knockout/blob/master/django_jinja_knockout/models.py
$ python manage.py shell <<'EOF'
> from django.contrib.auth.models import User
> User.objects.filter(groups__name='blogger')
> EOF
...
(InteractiveConsole)
>>> >>> [<User: foo>, <User: bar>, <User: baz>, '...(remaining elements truncated)...']
(CMS,从简单的答案,这是我不能编辑)
我有一个基本的模型,有这个要求 - 过滤一个用户列表的特定对象级权限(django-guardian)。什么是最好的方式来做到这一点 - 在模型上,在ModelForm或单独的窗体上? – 2014-08-31 12:23:22