"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:
1 parent
3346a3b9ce
commit
b4d2b7bfbf
2 files changed
+46
-17
No files matched your search
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
"""职务管理器——提供人事职务标签创建、岗位模板管理"""
|
||||
|
||||
Reference in new issue
Block a user