177 lines
8.5 KiB
Python
177 lines
8.5 KiB
Python
# Catálogo de permisos y configuración de roles por defecto.
|
|
# Este módulo es importado tanto por la data migration como por el signal de Organizacion,
|
|
# por lo que NO debe importar modelos directamente al nivel de módulo.
|
|
|
|
# --- CATÁLOGO DE PERMISOS ---
|
|
# (codename, descripcion, modulo)
|
|
PERMISSIONS_CATALOG = [
|
|
# Usuarios
|
|
('usuarios.view', 'Ver usuarios de la organización', 'usuarios'),
|
|
('usuarios.create', 'Crear usuarios en la organización', 'usuarios'),
|
|
('usuarios.edit', 'Modificar usuarios de la organización', 'usuarios'),
|
|
('usuarios.delete', 'Eliminar usuarios de la organización', 'usuarios'),
|
|
('usuarios.manage_roles', 'Asignar y revocar roles a usuarios', 'usuarios'),
|
|
('usuarios.change_password', 'Cambiar contraseña de otro usuario', 'usuarios'),
|
|
# Pedimentos
|
|
('pedimentos.view', 'Ver pedimentos', 'pedimentos'),
|
|
('pedimentos.create', 'Crear e importar pedimentos', 'pedimentos'),
|
|
('pedimentos.edit', 'Modificar pedimentos', 'pedimentos'),
|
|
('pedimentos.delete', 'Eliminar pedimentos', 'pedimentos'),
|
|
('pedimentos.process', 'Procesar pedimentos contra VUCEM', 'pedimentos'),
|
|
# Importadores
|
|
('importadores.view', 'Ver importadores', 'importadores'),
|
|
('importadores.create', 'Crear importadores', 'importadores'),
|
|
('importadores.edit', 'Modificar importadores', 'importadores'),
|
|
('importadores.delete', 'Eliminar importadores', 'importadores'),
|
|
# Partidas
|
|
('partidas.view', 'Ver partidas', 'partidas'),
|
|
('partidas.create', 'Crear partidas', 'partidas'),
|
|
('partidas.edit', 'Modificar partidas', 'partidas'),
|
|
('partidas.delete', 'Eliminar partidas', 'partidas'),
|
|
# Remesas
|
|
('remesas.view', 'Ver remesas', 'remesas'),
|
|
# COVEs
|
|
('coves.view', 'Ver COVEs', 'coves'),
|
|
('coves.create', 'Crear COVEs', 'coves'),
|
|
('coves.edit', 'Modificar COVEs', 'coves'),
|
|
('coves.delete', 'Eliminar COVEs', 'coves'),
|
|
# E-Documents
|
|
('edocuments.view', 'Ver E-Documents', 'edocuments'),
|
|
('edocuments.create', 'Crear E-Documents', 'edocuments'),
|
|
('edocuments.edit', 'Modificar E-Documents', 'edocuments'),
|
|
('edocuments.delete', 'Eliminar E-Documents', 'edocuments'),
|
|
# Acuses
|
|
('acuses.view', 'Ver acuses', 'acuses'),
|
|
# Documentos (expediente)
|
|
('documentos.view', 'Ver documentos del expediente', 'documentos'),
|
|
('documentos.upload', 'Cargar documentos', 'documentos'),
|
|
('documentos.download', 'Descargar documentos y ZIPs', 'documentos'),
|
|
('documentos.delete', 'Eliminar documentos del expediente', 'documentos'),
|
|
# VUCEM
|
|
('vucem.view', 'Ver credenciales VUCEM', 'vucem'),
|
|
('vucem.manage', 'Gestionar credenciales VUCEM', 'vucem'),
|
|
# Reportes
|
|
('reportes.view', 'Ver reportes y dashboard', 'reportes'),
|
|
('reportes.export', 'Exportar reportes a CSV/Excel', 'reportes'),
|
|
# DataStage
|
|
('datastage.view', 'Ver DataStages', 'datastage'),
|
|
('datastage.create', 'Crear DataStages', 'datastage'),
|
|
('datastage.process', 'Procesar DataStages', 'datastage'),
|
|
('datastage.delete', 'Eliminar DataStages', 'datastage'),
|
|
# Organización
|
|
('organizacion.view', 'Ver datos de la organización', 'organizacion'),
|
|
('organizacion.edit', 'Modificar datos de la organización', 'organizacion'),
|
|
# Notificaciones
|
|
('notificaciones.view', 'Ver notificaciones propias', 'notificaciones'),
|
|
('notificaciones.receive', 'Recibir notificaciones automáticas de eventos', 'notificaciones'),
|
|
# Cards / Analytics
|
|
('cards.view', 'Ver dashboard y analytics', 'cards'),
|
|
# Auditoría
|
|
('auditoria.view', 'Ver estado y resultados de auditoría VUCEM', 'auditoria'),
|
|
('auditoria.process', 'Lanzar procesos de auditoría y reauditoría', 'auditoria'),
|
|
]
|
|
|
|
# Conjuntos reutilizables para armar la matriz de permisos por rol
|
|
_IMPORTADORES_FULL = ['importadores.view', 'importadores.create', 'importadores.edit', 'importadores.delete']
|
|
_PEDIMENTOS_FULL = ['pedimentos.view', 'pedimentos.create', 'pedimentos.edit', 'pedimentos.delete', 'pedimentos.process']
|
|
_PARTIDAS_FULL = ['partidas.view', 'partidas.create', 'partidas.edit', 'partidas.delete']
|
|
_COVES_FULL = ['coves.view', 'coves.create', 'coves.edit', 'coves.delete']
|
|
_EDOCUMENTS_FULL = ['edocuments.view', 'edocuments.create', 'edocuments.edit', 'edocuments.delete']
|
|
_DOCUMENTOS_FULL = ['documentos.view', 'documentos.upload', 'documentos.download', 'documentos.delete']
|
|
_VUCEM_FULL = ['vucem.view', 'vucem.manage']
|
|
_REPORTES_FULL = ['reportes.view', 'reportes.export']
|
|
_DATASTAGE_FULL = ['datastage.view', 'datastage.create', 'datastage.process']
|
|
|
|
# --- ROLES POR DEFECTO ---
|
|
# Cada entrada: nombre → { descripcion, is_admin_role, permissions }
|
|
DEFAULT_ROLES = {
|
|
'admin': {
|
|
'descripcion': 'Administrador de la organización',
|
|
'is_admin_role': True,
|
|
'permissions': [
|
|
'usuarios.view', 'usuarios.create', 'usuarios.edit', 'usuarios.delete',
|
|
'usuarios.manage_roles', 'usuarios.change_password',
|
|
*_PEDIMENTOS_FULL, *_PARTIDAS_FULL, 'remesas.view',
|
|
*_COVES_FULL, *_EDOCUMENTS_FULL, 'acuses.view',
|
|
*_DOCUMENTOS_FULL, *_VUCEM_FULL,
|
|
*_IMPORTADORES_FULL,
|
|
*_REPORTES_FULL, *_DATASTAGE_FULL,
|
|
'organizacion.view', 'organizacion.edit',
|
|
'notificaciones.view', 'notificaciones.receive', 'cards.view',
|
|
'auditoria.view', 'auditoria.process',
|
|
],
|
|
},
|
|
'developer': {
|
|
'descripcion': 'Desarrollador con acceso técnico avanzado',
|
|
'is_admin_role': False,
|
|
'permissions': [
|
|
'usuarios.view', 'usuarios.create',
|
|
*_PEDIMENTOS_FULL, *_PARTIDAS_FULL, 'remesas.view',
|
|
*_COVES_FULL, *_EDOCUMENTS_FULL, 'acuses.view',
|
|
*_DOCUMENTOS_FULL, *_VUCEM_FULL, *_IMPORTADORES_FULL,
|
|
*_REPORTES_FULL, *_DATASTAGE_FULL,
|
|
'organizacion.view',
|
|
'notificaciones.view', 'notificaciones.receive', 'cards.view',
|
|
'auditoria.view', 'auditoria.process',
|
|
],
|
|
},
|
|
'Agente Aduanal': {
|
|
'descripcion': 'Agente aduanal operativo',
|
|
'is_admin_role': False,
|
|
'permissions': [
|
|
*_PEDIMENTOS_FULL, *_PARTIDAS_FULL, 'remesas.view',
|
|
*_COVES_FULL, *_EDOCUMENTS_FULL, 'acuses.view',
|
|
*_DOCUMENTOS_FULL, *_VUCEM_FULL,
|
|
*_REPORTES_FULL,
|
|
'organizacion.view',
|
|
'notificaciones.view', 'notificaciones.receive', 'cards.view',
|
|
'auditoria.view',
|
|
],
|
|
},
|
|
'user': {
|
|
'descripcion': 'Usuario básico de la organización',
|
|
'is_admin_role': False,
|
|
'permissions': [
|
|
'pedimentos.view', 'pedimentos.process',
|
|
'partidas.view', 'remesas.view',
|
|
'coves.view', 'edocuments.view', 'acuses.view',
|
|
'documentos.view', 'documentos.upload', 'documentos.download',
|
|
'reportes.view', 'datastage.view',
|
|
'notificaciones.view', 'notificaciones.receive', 'cards.view',
|
|
],
|
|
},
|
|
'Importador': {
|
|
'descripcion': 'Importador con acceso filtrado por RFC',
|
|
'is_admin_role': False,
|
|
'permissions': [
|
|
'pedimentos.view', 'partidas.view', 'remesas.view',
|
|
'coves.view', 'edocuments.view', 'acuses.view',
|
|
'documentos.view', 'documentos.download',
|
|
'vucem.view', 'vucem.manage',
|
|
'reportes.view',
|
|
'notificaciones.view', 'notificaciones.receive', 'cards.view',
|
|
],
|
|
},
|
|
}
|
|
|
|
|
|
def crear_roles_para_organizacion(organizacion):
|
|
"""Crea los 5 roles por defecto para una organización, con sus permisos.
|
|
Usa get_or_create — seguro de ejecutar múltiples veces."""
|
|
from api.rbac.models import RolePermission, OrganizationRole
|
|
|
|
perms_map = {p.codename: p for p in RolePermission.objects.all()}
|
|
|
|
for nombre, config in DEFAULT_ROLES.items():
|
|
role, created = OrganizationRole.objects.get_or_create(
|
|
organizacion=organizacion,
|
|
nombre=nombre,
|
|
defaults={
|
|
'descripcion': config['descripcion'],
|
|
'is_admin_role': config.get('is_admin_role', False),
|
|
},
|
|
)
|
|
if created:
|
|
role_perms = [perms_map[c] for c in config['permissions'] if c in perms_map]
|
|
role.permissions.set(role_perms)
|