refactor(rbac): migrate API permission checks to resource:action format

Replace all legacy dotted permission codes (vms.view, proxmox.manage, ...)
in PermissionChecker/has_permission across app/api with the new
resource:action format (vm:view, server:manage, ...), per LEGACY_PERMISSION_MAP.
All 33 codes used by the API are now registered in the permission registry.

Also switch the /api/auth/me admin branch to get_all_permissions_v2 so the
endpoint emits permissions in the new format only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-20 02:07:48 +05:00
parent 57513c4dc9
commit de967c35e0
19 changed files with 220 additions and 220 deletions

View File

@@ -31,7 +31,7 @@ def get_vm_snapshots(
vmid: int,
node: str,
db: Session = Depends(get_db),
current_user: User = Depends(PermissionChecker("vms.view"))
current_user: User = Depends(PermissionChecker("vm:view"))
):
"""Get all snapshots for a VM"""
# VPS-style user isolation
@@ -60,7 +60,7 @@ async def create_vm_snapshot(
node: str,
request: Request,
db: Session = Depends(get_db),
current_user: User = Depends(PermissionChecker("vms.view"))
current_user: User = Depends(PermissionChecker("vm:view"))
):
"""Create a VM snapshot"""
# VPS-style user isolation
@@ -114,7 +114,7 @@ def delete_vm_snapshot(
snapname: str,
node: str,
db: Session = Depends(get_db),
current_user: User = Depends(PermissionChecker("vms.view"))
current_user: User = Depends(PermissionChecker("vm:view"))
):
"""Delete a VM snapshot"""
# VPS-style user isolation
@@ -161,7 +161,7 @@ def rollback_vm_snapshot(
node: str,
start: bool = False,
db: Session = Depends(get_db),
current_user: User = Depends(PermissionChecker("vms.view"))
current_user: User = Depends(PermissionChecker("vm:view"))
):
"""Rollback a VM to a snapshot"""
# VPS-style user isolation
@@ -208,7 +208,7 @@ def get_container_snapshots(
vmid: int,
node: str,
db: Session = Depends(get_db),
current_user: User = Depends(PermissionChecker("vms.view"))
current_user: User = Depends(PermissionChecker("vm:view"))
):
"""Get all snapshots for a container"""
# VPS-style user isolation
@@ -237,7 +237,7 @@ async def create_container_snapshot(
node: str,
request: Request,
db: Session = Depends(get_db),
current_user: User = Depends(PermissionChecker("vms.view"))
current_user: User = Depends(PermissionChecker("vm:view"))
):
"""Create a container snapshot"""
# VPS-style user isolation
@@ -290,7 +290,7 @@ def delete_container_snapshot(
snapname: str,
node: str,
db: Session = Depends(get_db),
current_user: User = Depends(PermissionChecker("vms.view"))
current_user: User = Depends(PermissionChecker("vm:view"))
):
"""Delete a container snapshot"""
# VPS-style user isolation
@@ -337,7 +337,7 @@ def rollback_container_snapshot(
node: str,
start: bool = False,
db: Session = Depends(get_db),
current_user: User = Depends(PermissionChecker("vms.view"))
current_user: User = Depends(PermissionChecker("vm:view"))
):
"""Rollback a container to a snapshot"""
# VPS-style user isolation
@@ -385,7 +385,7 @@ def get_snapshot_archives(
limit: int = Query(50, ge=1, le=200),
offset: int = Query(0, ge=0),
db: Session = Depends(get_db),
current_user: User = Depends(PermissionChecker("logs.view"))
current_user: User = Depends(PermissionChecker("log:view"))
):
"""
Get archived snapshots from deleted VMs/containers.
@@ -432,7 +432,7 @@ def get_snapshot_archives(
def get_snapshot_archive_detail(
archive_id: int,
db: Session = Depends(get_db),
current_user: User = Depends(PermissionChecker("logs.view"))
current_user: User = Depends(PermissionChecker("log:view"))
):
"""Get full details of an archived snapshot including config"""
archive = db.query(VMSnapshotArchive).filter(VMSnapshotArchive.id == archive_id).first()