fix(rbac): register user:manage and vm:manage, close legacy map gaps

These permissions were referenced by the API (users.manage, proxmox.vm.manage)
but never registered in the permission registry, so they only worked through
the is_admin bypass — non-admin users granted them silently received 403.

- Register user:manage and vm:manage in the registry.
- Add missing legacy mappings: users.manage->user:manage,
  settings.manage->setting:manage.
- Grant both new permissions to the admin role (defaults + init.sql seed);
  ensure_default_roles_new_format propagates them to existing deployments.

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

View File

@@ -318,7 +318,14 @@ def _create_permissions() -> PermissionRegistry:
category="Virtual Machines",
requires=["vm:console"]
))
registry.register(Permission(
resource="vm", action="manage",
display_name="Manage VMs",
description="Full VM management including bulk operations",
category="Virtual Machines",
requires=["vm:view"]
))
# LXC (Container) permissions - same structure as VM
registry.register(Permission(
resource="lxc", action="view",
@@ -513,7 +520,14 @@ def _create_permissions() -> PermissionRegistry:
category="User Management",
requires=["user:view"]
))
registry.register(Permission(
resource="user", action="manage",
display_name="Manage Users",
description="Full user administration including managing other users' SSH keys",
category="User Management",
requires=["user:view"]
))
# Role management permissions
registry.register(Permission(
resource="role", action="view",
@@ -646,10 +660,12 @@ LEGACY_PERMISSION_MAP = {
"settings.view": "setting:view",
"settings.panel": "setting:update",
"settings.security": "setting:manage",
"settings.manage": "setting:manage",
"users.view": "user:view",
"users.create": "user:create",
"users.edit": "user:update",
"users.delete": "user:delete",
"users.manage": "user:manage",
"roles.view": "role:view",
"roles.manage": "role:manage",
"notifications.manage": "notification:manage",