"refactor(viewsets): permission create via RoleManager.CreatePermission

- single & batch (semicolon-separated) creation now delegates to SDK
- behavior identical: 409 on duplicate code, skip duplicates in batch"
This commit is contained in:
TermiNexus committed 2026-08-07 03:19:28 +08:00
1 parent 3346a3b9ce
commit b4d2b7bfbf
2 files changed
+46 -17

No files matched your search

+16 -17
View File
@@ -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:
+30
View File
@@ -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:
"""职务管理器——提供人事职务标签创建、岗位模板管理"""