first base of project-changed apps: Herd-livestock-tag-log-elasticsearch-
This commit is contained in:
81
apps/authorization/api/v1/serializers.py
Normal file
81
apps/authorization/api/v1/serializers.py
Normal file
@@ -0,0 +1,81 @@
|
||||
from rest_framework import serializers
|
||||
from apps.authorization.models import (
|
||||
Role,
|
||||
Permissions,
|
||||
UserRelations
|
||||
)
|
||||
from apps.authentication.api.v1.serializers import serializer as auth_serializer
|
||||
from apps.authentication.models import Organization
|
||||
|
||||
|
||||
class PermissionSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Permissions
|
||||
fields = [
|
||||
'id',
|
||||
'name',
|
||||
'description'
|
||||
]
|
||||
|
||||
|
||||
class RoleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Role
|
||||
fields = [
|
||||
'id',
|
||||
'role_name',
|
||||
'description',
|
||||
'type',
|
||||
'permissions'
|
||||
]
|
||||
extra_kwargs = {
|
||||
'permissions': {'required': False} # permissions not required for some roles
|
||||
}
|
||||
|
||||
def to_representation(self, instance):
|
||||
"""
|
||||
using @to_representation for many_to_many permissions in response
|
||||
"""
|
||||
representation = super().to_representation(instance)
|
||||
representation['type'] = auth_serializer.OrganizationTypeSerializer(instance.type).data
|
||||
representation['permissions'] = PermissionSerializer(instance.permissions, many=True).data
|
||||
return representation
|
||||
|
||||
|
||||
class UserRelationSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = UserRelations
|
||||
fields = [
|
||||
'id',
|
||||
'user',
|
||||
'organization',
|
||||
'role',
|
||||
'permissions',
|
||||
]
|
||||
|
||||
def to_representation(self, instance):
|
||||
representation = super().to_representation(instance)
|
||||
if isinstance(instance, UserRelations):
|
||||
if instance.user:
|
||||
representation['user'] = auth_serializer.UserSerializer(instance.user).data
|
||||
if instance.organization:
|
||||
representation['organization'] = auth_serializer.OrganizationSerializer(instance.organization).data
|
||||
if instance.role:
|
||||
representation['role'] = RoleSerializer(instance.role).data
|
||||
if instance.permissions:
|
||||
representation['permissions'] = PermissionSerializer(instance.permissions, many=True).data
|
||||
|
||||
return representation
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
""" update user relation object """
|
||||
if validated_data.get('role'):
|
||||
instance.role = Role.objects.get(id=validated_data.get('role', instance.role))
|
||||
if validated_data.get('organization'):
|
||||
instance.organization = Organization.objects.get(id=validated_data.get(
|
||||
'organization', instance.organization
|
||||
))
|
||||
instance.save()
|
||||
instance.permissions.clear()
|
||||
instance.permissions.add(*(validated_data.get('permissions', instance.permissions)))
|
||||
return instance
|
||||
Reference in New Issue
Block a user