fix(core,crm): habilitar RBAC por carril sin romper el entorno dev

- Crea el módulo faltante permissions/seed_v2.py (register_core_permissions), que
  sync_permissions y bootstrap_super_admin importan; sin él ambos fallaban con
  ImportError y el auto-bootstrap dev quedaba inoperante.
- seed: ensure_company (a76.company id=1, requerida por la FK de company_roles) y
  seed_carril_roles (Ventas, Operaciones, Facturación, Consulta) con sus permisos;
  pobla el PermissionRegistry importando los permisos de cada dominio.
- Verificado end-to-end: con enforcement activo el usuario dev auto-bootstrapea a
  super_admin y crm/ops/fin responden 200 (no 403).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Aduanasoft
2026-07-15 09:07:53 -06:00
parent e79705e6e3
commit 3ea8d5f3ef
2 changed files with 57 additions and 6 deletions

View File

@@ -0,0 +1,27 @@
"""Registro de permisos base del núcleo (core).
``PermissionService.sync_permissions`` y ``bootstrap_super_admin`` importan este
módulo por su efecto secundario: dar de alta en el ``PermissionRegistry`` los
permisos transversales del sistema antes de sincronizarlos a la base de datos.
Los permisos de cada dominio (crm, ops, fin) se registran en el
``register_permissions()`` de su propio módulo al importar sus routers.
"""
from .registry import registry
MODULE = "core"
def register_core_permissions() -> None:
"""Da de alta los permisos base del sistema (idempotente)."""
registry.register(code="core.access", description="Acceso al sistema", module=MODULE, action="access")
registry.register(code="core.admin", description="Administración del sistema", module=MODULE, action="admin")
registry.register(
code="core.permissions.manage",
description="Gestionar roles y permisos",
module=MODULE,
action="manage",
)
register_core_permissions()