place method to user class
This commit is contained in:
parent
6a6d623ef3
commit
f3ca4a8de9
|
|
@ -435,6 +435,15 @@ class User(AbstractUser):
|
||||||
result.append(item.id)
|
result.append(item.id)
|
||||||
return set(result)
|
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):
|
class UserRoleQueryset(models.QuerySet):
|
||||||
"""QuerySet for model UserRole."""
|
"""QuerySet for model UserRole."""
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from account import models
|
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
|
from main.models import SiteSettings
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -133,7 +133,11 @@ class BackDetailUserSerializer(BackUserSerializer):
|
||||||
subscriptions_list = validated_data.pop('subscription_types')
|
subscriptions_list = validated_data.pop('subscription_types')
|
||||||
|
|
||||||
if 'roles' in validated_data:
|
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)
|
instance = super().update(instance, validated_data)
|
||||||
subscriptions_handler(subscriptions_list, instance)
|
subscriptions_handler(subscriptions_list, instance)
|
||||||
|
|
|
||||||
|
|
@ -17,24 +17,6 @@ from utils.methods import generate_string_code
|
||||||
from phonenumber_field.serializerfields import PhoneNumberField
|
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):
|
def subscriptions_handler(subscriptions_list, user):
|
||||||
"""
|
"""
|
||||||
create or update subscriptions for user
|
create or update subscriptions for user
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user