From a930f3aab3b7b084a5fb4b60fd1b8722fee890be Mon Sep 17 00:00:00 2001 From: feng626 <1304903146@qq.com> Date: Tue, 8 Mar 2022 11:40:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=94=A8=E6=88=B7=E7=BB=99=E5=AE=9A=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/users/serializers/user.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/apps/users/serializers/user.py b/apps/users/serializers/user.py index 7a7950aba..21d67961b 100644 --- a/apps/users/serializers/user.py +++ b/apps/users/serializers/user.py @@ -6,7 +6,8 @@ from rest_framework import serializers from common.mixins import CommonBulkSerializerMixin from common.validators import PhoneValidator -from orgs.utils import current_org +from rbac.models import Role +from rbac.builtin import BuiltinRole from rbac.permissions import RBACPermission from rbac.models import OrgRoleBinding, SystemRoleBinding from ..models import User @@ -88,7 +89,10 @@ class UserSerializer(RolesSerializerMixin, CommonBulkSerializerMixin, serializer # Todo: 这里看看该怎么搞 # can_update = serializers.SerializerMethodField(label=_('Can update')) # can_delete = serializers.SerializerMethodField(label=_('Can delete')) - custom_m2m_fields = ('system_roles', 'org_roles') + custom_m2m_fields = { + 'system_roles': [BuiltinRole.system_user], + 'org_roles': [BuiltinRole.org_user] + } class Meta: model = User @@ -182,10 +186,17 @@ class UserSerializer(RolesSerializerMixin, CommonBulkSerializerMixin, serializer attrs.pop('password_strategy', None) return attrs - def save_and_set_custom_m2m_fields(self, validated_data, save_handler): - m2m_values = { - f: validated_data.pop(f, None) for f in self.custom_m2m_fields - } + def save_and_set_custom_m2m_fields(self, validated_data, save_handler, created): + m2m_values = {} + for f, default_roles in self.custom_m2m_fields.items(): + roles = validated_data.pop(f, None) + if created and not roles: + roles = [ + Role.objects.filter(id=role.id).first() + for role in default_roles + ] + m2m_values[f] = roles + instance = save_handler(validated_data) for field_name, value in m2m_values.items(): if value is None: @@ -207,12 +218,12 @@ class UserSerializer(RolesSerializerMixin, CommonBulkSerializerMixin, serializer def update(self, instance, validated_data): save_handler = partial(super().update, instance) - instance = self.save_and_set_custom_m2m_fields(validated_data, save_handler) + instance = self.save_and_set_custom_m2m_fields(validated_data, save_handler, created=False) return instance def create(self, validated_data): save_handler = super().create - instance = self.save_and_set_custom_m2m_fields(validated_data, save_handler) + instance = self.save_and_set_custom_m2m_fields(validated_data, save_handler, created=True) return instance