diff --git a/gvsds/apps/gerp/views/viewsets.py b/gvsds/apps/gerp/views/viewsets.py index 72ad64c5..9bcba160 100644 --- a/gvsds/apps/gerp/views/viewsets.py +++ b/gvsds/apps/gerp/views/viewsets.py @@ -520,21 +520,21 @@ class PermissionViewSet(TenantScopedMixin, viewsets.ModelViewSet): perm_status = serializer.validated_data.get('PermStatus', 1) perm_desc = serializer.validated_data.get('PermDesc', '') + from gvsdsdk.auth.managers import RoleManager if ';' not in perm_code_raw: - if Permission.objects.filter(PermCode=perm_code_raw, TenantUUID=tenant_uuid).exists(): - return Response( - {'code': 409, 'msg': f'权限码重复:{perm_code_raw}'}, - status=status.HTTP_409_CONFLICT - ) - perm = Permission.objects.create( - PermUUID=uuid.uuid4().bytes, - TenantUUID=tenant_uuid, + perm, created = RoleManager.CreatePermission( PermCode=perm_code_raw, - PermName=perm_name or perm_code_raw, + TenantUUID=tenant_uuid, + PermName=perm_name, PermCategory=perm_category, PermStatus=perm_status, PermDesc=perm_desc, ) + if not created: + return Response( + {'code': 409, 'msg': f'权限码重复:{perm_code_raw}'}, + status=status.HTTP_409_CONFLICT + ) return Response( {'code': 0, 'msg': '创建成功', 'data': PermissionSerializer(perm).data}, status=status.HTTP_201_CREATED, @@ -544,19 +544,18 @@ class PermissionViewSet(TenantScopedMixin, viewsets.ModelViewSet): created = [] errors = [] for code in codes: - if Permission.objects.filter(PermCode=code, TenantUUID=tenant_uuid).exists(): - errors.append(code) - continue - Permission.objects.create( - PermUUID=uuid.uuid4().bytes, - TenantUUID=tenant_uuid, + _, ok = RoleManager.CreatePermission( PermCode=code, - PermName=perm_name or code, + TenantUUID=tenant_uuid, + PermName=perm_name, PermCategory=perm_category, PermStatus=perm_status, PermDesc=perm_desc, ) - created.append(code) + if ok: + created.append(code) + else: + errors.append(code) msg = f"批量创建完成: 成功{len(created)}条" if errors: diff --git a/gvsdsdk/auth/managers.py b/gvsdsdk/auth/managers.py index 7141b2ed..aea0b386 100644 --- a/gvsdsdk/auth/managers.py +++ b/gvsdsdk/auth/managers.py @@ -231,6 +231,36 @@ class RoleManager: return _apply() return _apply() + @staticmethod + def CreatePermission(PermCode, TenantUUID, PermName='', PermCategory='', + PermStatus=1, PermDesc=''): + """创建权限(同租户内权限码唯一) + + Args: + PermCode: 权限码 + TenantUUID: 租户 UUID(UUIDObj/str/bytes 均可) + PermName: 权限名称(为空时回退到权限码) + PermCategory: 权限分类 + PermStatus: 状态(1=启用) + PermDesc: 描述 + + Returns: + (Permission 实例, created: bool);权限码已存在返回 (None, False) + """ + if Permission.objects.filter(PermCode=PermCode, TenantUUID=TenantUUID).exists(): + return None, False + perm = Permission( + PermUUID=uuid.uuid4().bytes, + TenantUUID=TenantUUID, + PermCode=PermCode, + PermName=PermName or PermCode, + PermCategory=PermCategory, + PermStatus=PermStatus, + PermDesc=PermDesc, + ) + perm.save() + return perm, True + class PositionManager: """职务管理器——提供人事职务标签创建、岗位模板管理"""