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模型联系起来吗?
你可以这样做:
在__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)
我不认为这里有一个“正确”的答案,但我使用了与你完全相同的代码,除了我更改Permission.objects.create为Permission.objects.get_or_create并且工作发现与syncdb同步
| 归档时间: |
|
| 查看次数: |
11158 次 |
| 最近记录: |