diff --git a/apps/account/models.py b/apps/account/models.py index 08944f0c..77f4d951 100644 --- a/apps/account/models.py +++ b/apps/account/models.py @@ -435,6 +435,15 @@ class User(AbstractUser): result.append(item.id) return set(result) + def set_roles(self, ids: set): + """ + Set user roles + :param ids: list of role ids + :return: bool + """ + self.roles.set(Role.objects.filter(id__in=ids)) + return self + class UserRoleQueryset(models.QuerySet): """QuerySet for model UserRole.""" diff --git a/apps/account/serializers/back.py b/apps/account/serializers/back.py index 4fba1c6f..af1029b5 100644 --- a/apps/account/serializers/back.py +++ b/apps/account/serializers/back.py @@ -2,7 +2,7 @@ from rest_framework import serializers from account import models -from account.serializers import RoleBaseSerializer, UserSerializer, subscriptions_handler, roles_handler +from account.serializers import RoleBaseSerializer, UserSerializer, subscriptions_handler from main.models import SiteSettings @@ -133,7 +133,11 @@ class BackDetailUserSerializer(BackUserSerializer): subscriptions_list = validated_data.pop('subscription_types') if 'roles' in validated_data: - instance = roles_handler(validated_data.pop('roles'), instance) + roles_ids = filter( + lambda filter_role: False if not filter_role else True, + map(lambda role: role["id"] if "id" in role else None, validated_data.pop("roles")) + ) + instance.set_roles(roles_ids) instance = super().update(instance, validated_data) subscriptions_handler(subscriptions_list, instance) diff --git a/apps/account/serializers/common.py b/apps/account/serializers/common.py index 790cbfdf..7ae6cb70 100644 --- a/apps/account/serializers/common.py +++ b/apps/account/serializers/common.py @@ -17,24 +17,6 @@ from utils.methods import generate_string_code from phonenumber_field.serializerfields import PhoneNumberField -def roles_handler(roles_list: set, user: User) -> User: - """ - Sync roles for user - :param roles_list: list of user roles - :param user: user - :return: bool - """ - if not roles_list: - user.roles.clear() - return user - - ids = list(map(lambda role: role["id"] if "id" in role else None, roles_list)) - roles = Role.objects \ - .filter(id__in=ids) - user.roles.set(roles) - return user - - def subscriptions_handler(subscriptions_list, user): """ create or update subscriptions for user