From 7d09a467edb0fad025cf3a14e07589dcae04fbbb Mon Sep 17 00:00:00 2001 From: schnee Date: Sun, 28 Apr 2024 10:33:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20enable=20validate=20manager=5Feditable?= =?UTF-8?q?=3DFalse=20custom=20fields=20when=20update=E2=80=A6=20(#1678)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/organization/serializers/users.py | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/bk-user/bkuser/apis/web/organization/serializers/users.py b/src/bk-user/bkuser/apis/web/organization/serializers/users.py index 74248e1f6..45bf38123 100644 --- a/src/bk-user/bkuser/apis/web/organization/serializers/users.py +++ b/src/bk-user/bkuser/apis/web/organization/serializers/users.py @@ -130,9 +130,15 @@ class TenantUserCreateInputSLZ(serializers.Serializer): extras = serializers.JSONField(help_text="自定义字段", default=dict) department_ids = serializers.ListField( - help_text="租户部门 ID 列表", child=serializers.IntegerField(), default=list + help_text="租户部门 ID 列表", + child=serializers.IntegerField(), + default=list, + ) + leader_ids = serializers.ListField( + help_text="租户上级 ID 列表", + child=serializers.CharField(), + default=list, ) - leader_ids = serializers.ListField(help_text="租户上级 ID 列表", child=serializers.CharField(), default=list) def validate_username(self, username: str) -> str: return _validate_duplicate_data_source_username(self.context["data_source_id"], username) @@ -248,13 +254,18 @@ def validate_username(self, username: str) -> str: ) def validate_extras(self, extras: Dict[str, Any]) -> Dict[str, Any]: - # 更新模式下,一些自定义字段是不允许修改的(前端也需要禁用) - custom_fields = TenantUserCustomField.objects.filter( - tenant_id=self.context["tenant_id"], manager_editable=True - ) - return validate_user_extras( + custom_fields = TenantUserCustomField.objects.filter(tenant_id=self.context["tenant_id"]) + + extras = validate_user_extras( extras, custom_fields, self.context["data_source_id"], self.context["data_source_user_id"] ) + # 更新模式下,一些自定义字段是不允许修改的(前端也需要禁用) + # 这里的处理策略是:在通过校验之后,用 DB 中的数据进行替换 + exists_extras = DataSourceUser.objects.get(id=self.context["data_source_user_id"]).extras + for f in custom_fields.filter(manager_editable=False): + extras[f.name] = exists_extras[f.name] + + return extras def validate_leader_ids(self, leader_ids: List[str]) -> List[str]: if self.context["tenant_user_id"] in leader_ids: