Roles ampliados (10) y matriz de permisos por rol
- Roles: admin, médico, recepción, enfermería, cosmetología, psicóloga, farmacia, entrenador, marketing + lectura (compatibilidad) - Matriz de permisos por rol persistida en Odoo (ir.config_parameter) y editable en Configuración → Roles (secciones × roles) - Prioridad: permisos personales del usuario > matriz por rol > defaults - Protección: admin siempre conserva /configuracion
This commit is contained in:
@@ -5,6 +5,8 @@ import json
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
from ..roles import ROLE_SELECTION, ROLE_RANKS
|
||||
|
||||
try:
|
||||
from werkzeug.security import check_password_hash, generate_password_hash
|
||||
except Exception: # pragma: no cover
|
||||
@@ -21,12 +23,7 @@ class SkeenFrontendUser(models.Model):
|
||||
login = fields.Char(string='Usuario', required=True, index=True)
|
||||
name = fields.Char(string='Nombre', required=True)
|
||||
password_hash = fields.Char(string='Hash de contraseña', required=True)
|
||||
role = fields.Selection([
|
||||
('admin', 'Administrador'),
|
||||
('recepcion', 'Recepción'),
|
||||
('medico', 'Médico'),
|
||||
('lectura', 'Solo lectura'),
|
||||
], string='Rol', default='recepcion', required=True)
|
||||
role = fields.Selection(ROLE_SELECTION, string='Rol', default='recepcion', required=True)
|
||||
active = fields.Boolean(string='Activo', default=True)
|
||||
must_change_password = fields.Boolean(string='Debe cambiar contraseña', default=False)
|
||||
last_login = fields.Datetime(string='Último acceso', readonly=True)
|
||||
@@ -58,12 +55,7 @@ class SkeenFrontendUser(models.Model):
|
||||
def role_rank(self):
|
||||
"""Jerarquía simple para permisos: mayor número = más acceso."""
|
||||
self.ensure_one()
|
||||
return {
|
||||
'lectura': 10,
|
||||
'medico': 50,
|
||||
'recepcion': 50,
|
||||
'admin': 100,
|
||||
}.get(self.role, 0)
|
||||
return ROLE_RANKS.get(self.role, 0)
|
||||
|
||||
def _allowed_menus_list(self):
|
||||
"""Devuelve la lista de hrefs permitidos o None (usar defaults por rol)"""
|
||||
|
||||
Reference in New Issue
Block a user