如何在django中为用户模型添加自定义权限?

gsi*_*sin 19 python django django-permissions

在django中默认情况下,当安装了django.contrib.auth运行syncdb时,它会为每个模型创建默认权限...如foo.can_change,foo.can_delete和foo.can_add.要向模型添加自定义权限,可以在模型下添加类Meta:并在那里定义权限,如此处所述https://docs.djangoproject.com/en/dev/topics/auth/#custom-permissions

我的问题是,如果我想为User模型添加自定义权限,该怎么办?喜欢foo.can_view.我可以使用以下代码段执行此操作,

ct = ContentType.objects.get(app_label='auth', model='user')
perm = Permission.objects.create(codename='can_view', name='Can View Users', 
                                  content_type=ct)
perm.save()
Run Code Online (Sandbox Code Playgroud)

但是我想要一些与syncdb很好地结合的东西,例如我自定义模型下的Meta类.我应该在MetaTlass类中使用这些,因为这是扩展用户模型的方法.但这是正确的方法吗?它不会与UserProfile模型联系起来吗?

Dze*_*kob 8

你可以这样做:

__init__.py您的Django应用程序中添加:

from django.db.models.signals import post_syncdb
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth import models as auth_models
from django.contrib.auth.models import Permission

# custom user related permissions
def add_user_permissions(sender, **kwargs):
    ct = ContentType.objects.get(app_label='auth', model='user')
    perm, created = Permission.objects.get_or_create(codename='can_view', name='Can View Users', content_type=ct)
post_syncdb.connect(add_user_permissions, sender=auth_models)
Run Code Online (Sandbox Code Playgroud)


lee*_*ech 5

我不认为这里有一个“正确”的答案,但我使用了与你完全相同的代码,除了我更改Permission.objects.createPermission.objects.get_or_create并且工作发现与syncdb同步

  • 您应该仅使用代号作为 get 或 create 的 get 部分,并将名称放在“defaults”中 (3认同)