12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- # coding=utf-8
- import json
- from django.contrib.auth.models import Group, Permission
- from rest_framework import serializers
- from utils.exceptions import CustomError
- class PermissionSerializer(serializers.ModelSerializer):
- class Meta:
- model = Permission
- fields = ('id', 'name', )
- class GroupSerializer(serializers.ModelSerializer):
- employees = serializers.SerializerMethodField()
- permissions = PermissionSerializer(many=True, read_only=True)
- def get_employees(self, obj):
- users = obj.user_set.all()
- data = []
- for user in users:
- data.append(user.employee.name)
- return data
- class Meta:
- model = Group
- fields = ('id', 'display_name', 'employees', 'permissions', 'name')
- def create(self, validated_data):
- user = self.context['request'].user
- validated_data['tenant'] = user.employee.tenant
- validated_data['create_user'] = user
- validated_data['name'] = validated_data['name'] + '@' + str(validated_data['tenant'].id)
- group = Group.objects.filter(name=validated_data['name']).first()
- if group:
- raise CustomError(u'名称为[%s]的权限组已存在' % validated_data['display_name'])
- permissions = self.context['request'].data.get('permissions', None)
- if permissions:
- permissions = json.loads(permissions)
- else:
- permissions = []
- instance = super(GroupSerializer, self).create(validated_data)
- instance.permissions.set(permissions)
- return instance
- def update(self, instance, validated_data):
- validated_data['name'] = validated_data['name'] + '@' + str(instance.tenant_id)
- group = Group.objects.filter(name=validated_data['name']).exclude(id=instance.id).first()
- if group:
- raise CustomError(u'名称为[%s]的权限组已存在' % validated_data['display_name'])
- permissions = self.context['request'].data.get('permissions', None)
- if permissions:
- permissions = json.loads(permissions)
- else:
- permissions = []
- instance = super(GroupSerializer, self).update(instance, validated_data)
- instance.permissions.set(permissions)
- return instance
- class GroupDictSerializer(serializers.ModelSerializer):
- value = serializers.CharField(source='id', read_only=True)
- name = serializers.CharField(source='display_name', read_only=True)
- class Meta:
- model = Group
- fields = ('value', 'name', )
|