You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.9 KiB

2 years ago
from rest_framework.serializers import ModelSerializer, Serializer, IntegerField, BooleanField
from .permission_serializer import PermissionsSerializer
from erp_system.models import RolesModel, PermissionsModel
from rest_framework import serializers
class RolesSerializer(ModelSerializer):
"""
普通的序列化
"""
permissions = PermissionsSerializer(many=True, read_only=True)
delete_flag = serializers.CharField(read_only=True)
class Meta:
model = RolesModel
fields = '__all__'
class RolesPartialSerializer(ModelSerializer):
"""
给一个角色批量授权的序列化器
"""
class Meta:
model = RolesModel
fields = ['id', 'permissions']
def save(self, **kwargs):
# 针对某一个角色批量授权,之前存在的不变,之前没有的会增加权限
if self.instance:
permission_list = self.validated_data.get('permissions')
current_list = self.instance.permissions.all()
if permission_list:
for p in permission_list:
if p not in current_list:
# 多对多的关联 如果数据库中已经存在对象则使用add否则使用
# 变量名=变量名.B类名小写_set.create(字段='值')
self.instance.permissions.add(p.id)
self.instance.save()
return self.instance
class RoleSetPermissionSerializer(Serializer):
"""
角色单一授权或者取消单一授权
"""
# 角色ID
role_id = IntegerField(write_only=True, required=True, help_text='选择的角色ID')
permission_id = IntegerField(write_only=True, required=True, help_text='选择的权限ID')
# 是否是:取消授权还是授予权限
is_create = BooleanField(write_only=True, required=True, help_text='是否授予还是删除权限')