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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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='是否授予还是删除权限')