【发布时间】:2018-01-31 14:01:06
【问题描述】:
现在我可以使用 Django 组模块创建新组。
from django.contrib.auth.models import Group
我可以为组分配权限。例如我创建了一个新组
“人力资源”
Group(name="HR").
现在我想创建类似的权限
- can_create_hr
- can_edit_hr
我应该能够将此权限分配给其他组。
我该怎么做?
【问题讨论】:
现在我可以使用 Django 组模块创建新组。
from django.contrib.auth.models import Group
我可以为组分配权限。例如我创建了一个新组
“人力资源”
Group(name="HR").
现在我想创建类似的权限
我应该能够将此权限分配给其他组。
我该怎么做?
【问题讨论】:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, Group ,Permission
class Role(models.Model):
role=models.CharField(max_length=50,unique=True)
groups = models.ManyToManyField(Permission)
def __str__(self):
return str(self.role)
# def ___init__(self, name):
# self.name = role
class User(AbstractBaseUser):
email =models.EmailField(max_length=225,unique=True)
name =models.CharField(max_length=225)
created = models.DateTimeField(auto_now_add=True)
is_active=models.BooleanField(default=True)
role=models.ForeignKey(Role,on_delete=models.CASCADE,default=0)
USERNAME_FIELD ='email'
REQUIRED_FIELDS=['username']
更多信息请访问[这里]:https://github.com/jocavinashi/Dynamic-role-in-Django-rest-framework
【讨论】:
如果你创建一个空白迁移,你可以这样做(借用上面的答案):
def create_groups_and_permissions(apps, schema_editor):
Group = apps.get_model('auth', 'Group')
ContentType = apps.get_model('contenttypes', 'ContentType')
Permission = apps.get_model('auth', 'Permission')
emit_post_migrate_signal(2, False, 'default') # this creates default permissions (in case this migration was run simultaneously with the creation of relevant models and you need to grab those perms)
content_type = ContentType.objects.get(app_label='app_name', model='model_name')
permission = Permission.objects.create(codename='can_create_hr',
name='Can create HR',
content_type=content_type) # creating permissions
group = Group.objects.filter(name='HR')
group.permissions.add(permission)
class Migration(migrations.Migration):
dependencies = [
('lsoa', '0001_initial'),
]
operations = [
migrations.RunPython(create_groups_and_permissions)
]
【讨论】:
您也可以直接创建权限并将其分配给组。只需创建权限添加权限到组
from django.contrib.auth.models import User, Group, Permission
from django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get(app_label='app_name', model='model_name')
permission = Permission.objects.create(codename='can_create_hr',
name='Can create HR',
content_type=content_type) # creating permissions
group = Group.objects.get(name='HR')
group.permissions.add(permission)
如果您想将此权限分配给另一个组,则只需获取权限对象并以相同方式分配即可。
permission = Permission.objects.get(codename='can_create_hr')
group= Group.objects.get(name='some_name')
group.permissions.add(permission)
您可以在docs阅读更多相关信息
【讨论】: