first base of project-changed apps: Herd-livestock-tag-log-elasticsearch-

This commit is contained in:
2025-05-24 15:01:55 +03:30
parent eab40af15d
commit 90a46e493c
129 changed files with 3844 additions and 187 deletions

View 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