fase 2.1: roles editables (modelo skeen.role) y permisos por accion (43 claves, 9 grupos) con enforcement en backend y gating en frontend; editor de roles/permisos/menus en Configuracion
This commit is contained in:
@@ -7,7 +7,7 @@ Expone endpoints REST para el frontend SKEEN.
|
||||
from odoo import http, fields
|
||||
from odoo.http import request
|
||||
from .frontend import json_response, _parse_json_body
|
||||
from .auth import require_role
|
||||
from .auth import require_role, require_perm
|
||||
import os
|
||||
import logging
|
||||
import requests
|
||||
@@ -397,6 +397,8 @@ class SkeenWacrmProxyController(http.Controller):
|
||||
# Mensajes
|
||||
# ============================================================
|
||||
@http.route('/skeen/frontend/v1/wacrm/messages', type='http', auth='none', methods=['POST', 'OPTIONS'], csrf=False)
|
||||
@require_role('lectura')
|
||||
@require_perm('whatsapp.responder')
|
||||
def send_message(self, **kw):
|
||||
try:
|
||||
data = _parse_json_body()
|
||||
@@ -547,6 +549,8 @@ class SkeenWacrmProxyController(http.Controller):
|
||||
return json_response({'status': 'error', 'message': str(e)}, 500)
|
||||
|
||||
@http.route('/skeen/frontend/v1/wacrm/conversations/<string:external_id>/assign', type='http', auth='none', methods=['POST', 'OPTIONS'], csrf=False)
|
||||
@require_role('lectura')
|
||||
@require_perm('whatsapp.asignar')
|
||||
def assign_conversation(self, external_id, **kw):
|
||||
try:
|
||||
data = _parse_json_body()
|
||||
@@ -641,6 +645,8 @@ class SkeenWacrmProxyController(http.Controller):
|
||||
return json_response({'status': 'error', 'message': str(e)}, 500)
|
||||
|
||||
@http.route('/skeen/frontend/v1/wacrm/leads/<int:lead_id>/status', type='http', auth='none', methods=['PUT'], csrf=False)
|
||||
@require_role('lectura')
|
||||
@require_perm('whatsapp.asignar')
|
||||
def update_lead_status(self, lead_id, **kw):
|
||||
try:
|
||||
deal = request.env['skeen.wacrm.deal'].sudo().browse(lead_id)
|
||||
@@ -679,6 +685,8 @@ class SkeenWacrmProxyController(http.Controller):
|
||||
return json_response({'status': 'error', 'message': str(e)}, 500)
|
||||
|
||||
@http.route('/skeen/frontend/v1/wacrm/leads/<int:lead_id>/convert', type='http', auth='none', methods=['POST', 'OPTIONS'], csrf=False)
|
||||
@require_role('lectura')
|
||||
@require_perm('whatsapp.asignar')
|
||||
def convert_lead(self, lead_id, **kw):
|
||||
"""Convierte el lead en paciente SKEEN (crea o liga por teléfono) y lo marca ganado"""
|
||||
try:
|
||||
@@ -805,6 +813,7 @@ class SkeenWacrmProxyController(http.Controller):
|
||||
|
||||
@http.route('/skeen/frontend/v1/wacrm/conversations/<string:external_id>/notes', type='http', auth='none', methods=['POST', 'OPTIONS'], csrf=False)
|
||||
@require_role('recepcion')
|
||||
@require_perm('whatsapp.responder')
|
||||
def create_note(self, external_id, **kw):
|
||||
try:
|
||||
data = _parse_json_body()
|
||||
@@ -827,6 +836,7 @@ class SkeenWacrmProxyController(http.Controller):
|
||||
|
||||
@http.route('/skeen/frontend/v1/wacrm/notes/<int:note_id>', type='http', auth='none', methods=['PUT', 'OPTIONS'], csrf=False)
|
||||
@require_role('recepcion')
|
||||
@require_perm('whatsapp.responder')
|
||||
def update_note(self, note_id, **kw):
|
||||
"""Marca/desmarca una nota como atendida, o edita su texto."""
|
||||
try:
|
||||
@@ -854,6 +864,7 @@ class SkeenWacrmProxyController(http.Controller):
|
||||
|
||||
@http.route('/skeen/frontend/v1/wacrm/notes/<int:note_id>', type='http', auth='none', methods=['DELETE'], csrf=False)
|
||||
@require_role('recepcion')
|
||||
@require_perm('whatsapp.responder')
|
||||
def delete_note(self, note_id, **kw):
|
||||
try:
|
||||
note = request.env['skeen.wacrm.note'].sudo().browse(note_id)
|
||||
@@ -876,6 +887,7 @@ class SkeenWacrmProxyController(http.Controller):
|
||||
|
||||
@http.route('/skeen/frontend/v1/wacrm/tags', type='http', auth='none', methods=['POST', 'OPTIONS'], csrf=False)
|
||||
@require_role('recepcion')
|
||||
@require_perm('whatsapp.responder')
|
||||
def create_tag(self, **kw):
|
||||
try:
|
||||
data = _parse_json_body()
|
||||
@@ -906,6 +918,7 @@ class SkeenWacrmProxyController(http.Controller):
|
||||
|
||||
@http.route('/skeen/frontend/v1/wacrm/tags/<int:tag_id>', type='http', auth='none', methods=['PUT', 'OPTIONS'], csrf=False)
|
||||
@require_role('recepcion')
|
||||
@require_perm('whatsapp.responder')
|
||||
def update_tag(self, tag_id, **kw):
|
||||
try:
|
||||
tag = request.env['skeen.wacrm.tag'].sudo().browse(tag_id)
|
||||
@@ -936,6 +949,7 @@ class SkeenWacrmProxyController(http.Controller):
|
||||
|
||||
@http.route('/skeen/frontend/v1/wacrm/tags/<int:tag_id>', type='http', auth='none', methods=['DELETE'], csrf=False)
|
||||
@require_role('recepcion')
|
||||
@require_perm('whatsapp.responder')
|
||||
def delete_tag(self, tag_id, **kw):
|
||||
"""Desactiva la etiqueta (conserva el histórico de asignaciones)."""
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user