Skip to content

ave-dev28/odoo_api

Repository files navigation

Odoo Access Rights API 🔐

API FastAPI con Arquitectura Hexagonal para gestionar autenticación y validación de permisos en Odoo mediante JSONRPC.

🏗️ Arquitectura

Este proyecto implementa Arquitectura Hexagonal (Ports & Adapters) para mantener el código limpio, testeable y desacoplado:

src/
├── domain/              # 🎯 Capa de Dominio (Núcleo)
│   ├── entities/        # Entidades del negocio
│   ├── value_objects/   # Value Objects inmutables
│   ├── repositories/    # Interfaces (Ports)
│   └── exceptions/      # Excepciones del dominio
├── application/         # 💼 Capa de Aplicación
│   └── use_cases/       # Casos de uso del negocio
├── infrastructure/      # 🔧 Capa de Infraestructura (Adapters)
│   ├── odoo/           # Cliente JSONRPC de Odoo
│   ├── repositories/   # Implementaciones concretas
│   └── config/         # Configuración
└── presentation/        # 🌐 Capa de Presentación
    ├── api/            # Endpoints FastAPI
    ├── schemas/        # Schemas Pydantic
    └── dependencies/   # Inyección de dependencias

Capas

  • Domain: Lógica de negocio pura, sin dependencias externas
  • Application: Casos de uso que orquestan la lógica de dominio
  • Infrastructure: Implementaciones técnicas (Odoo JSONRPC, BD, etc.)
  • Presentation: API REST con FastAPI

✨ Características

  • ✅ Autenticación con Odoo mediante JSONRPC
  • ✅ Verificación de permisos sobre modelos (CRUD)
  • ✅ Consulta de grupos de seguridad del usuario
  • ✅ Consulta de acceso a aplicaciones de Odoo
  • ✅ Información completa del usuario
  • ✅ Arquitectura limpia y testeable
  • ✅ Documentación automática con Swagger/ReDoc
  • ✅ Validación con Pydantic
  • ✅ CORS configurable

🚀 Instalación

1. Clonar o descargar el proyecto

cd /home/dannkol/Documentos/odoo/sales

2. Crear entorno virtual

python3 -m venv venv
source venv/bin/activate  # En Linux/Mac
# venv\Scripts\activate  # En Windows

3. Instalar dependencias

pip install -r requirements.txt

4. Configurar variables de entorno

Copiar el archivo de ejemplo y configurar:

cp .env.example .env

Editar .env con tus credenciales de Odoo:

ODOO_URL=https://ave-odoo.coolify.meeldavlab.xyz
ODOO_DATABASE=odoo
ODOO_TIMEOUT=30

SECRET_KEY=your-super-secret-key

🎮 Uso

Iniciar el servidor

python main.py

O con uvicorn directamente:

uvicorn main:app --reload --host 0.0.0.0 --port 8000

La API estará disponible en:

📚 Endpoints

🔐 Autenticación

POST /api/v1/auth/login

Autenticar usuario en Odoo.

Request:

{
  "database": "odoo",
  "username": "dannkol@fake.com",
  "password": "your_password"
}

Response:

{
  "success": true,
  "message": "Autenticación exitosa",
  "uid": 8,
  "username": "dannkol@fake.com",
  "database": "odoo",
  "server_info": {
    "server_version": "18.0-20250918",
    "server_serie": "18.0",
    "protocol_version": 1
  }
}

Nota: El uid retornado debe usarse como Bearer token en las siguientes peticiones.

GET /api/v1/auth/me

Obtener información del usuario actual.

Headers:

Authorization: Bearer {uid}

Response:

{
  "uid": 8,
  "name": "Daniel Manosalva",
  "login": "dannkol@fake.com",
  "email": "dannkol@fake.com",
  "is_administrator": false,
  "groups": [...],
  "total_groups": 30
}

🔑 Permisos

POST /api/v1/permissions/check

Verificar si el usuario tiene permiso para una operación específica.

Headers:

Authorization: Bearer {uid}

Request:

{
  "model": "res.partner",
  "operation": "read",
  "raise_exception": false
}

Response:

{
  "model": "res.partner",
  "operation": "read",
  "has_access": true,
  "message": "Acceso concedido para operación 'read' en modelo 'res.partner'"
}

GET /api/v1/permissions/models

Obtener permisos sobre múltiples modelos.

Headers:

Authorization: Bearer {uid}

Query params (opcional):

  • models: Lista de modelos a verificar

Response:

{
  "uid": 8,
  "permissions": {
    "res.partner": {
      "read": true,
      "write": true,
      "create": false,
      "unlink": false
    },
    "sale.order": {
      "read": true,
      "write": true,
      "create": true,
      "unlink": false
    }
  },
  "total_models": 11
}

GET /api/v1/permissions/applications

Obtener acceso a las aplicaciones de Odoo.

Headers:

Authorization: Bearer {uid}

Response:

{
  "uid": 8,
  "administration": {
    "Administration": true,
    "Settings": true
  },
  "management": {
    "Sales Manager": true,
    "Purchase Manager": true
  },
  "user_access": {
    "Sales": true,
    "Purchase": true,
    "Inventory": true
  },
  "no_access": ["Point of Sale", "Manufacturing"],
  "summary": {
    "total_applications": 20,
    "with_access": 15,
    "without_access": 5,
    "access_percentage": 75.0
  }
}

🧪 Testing

# Instalar dependencias de testing
pip install pytest pytest-asyncio pytest-cov

# Ejecutar tests
pytest

# Con cobertura
pytest --cov=src tests/

🔒 Autenticación

Por simplicidad, esta API usa el UID como Bearer token directamente. En producción, se recomienda:

  1. Implementar JWT tokens
  2. Agregar refresh tokens
  3. Gestionar expiración de sesiones
  4. Implementar rate limiting

📖 Basado en

  • Colección de Postman: "Odoo JSONRPC over REST"
  • Documentación Odoo: External API
  • Script original: test/odoo_access_rights_complete.py

🛠️ Tecnologías

  • FastAPI: Framework web moderno y rápido
  • Pydantic: Validación de datos
  • Odoo JSONRPC: Comunicación con Odoo
  • Arquitectura Hexagonal: Clean Architecture

📝 Modelos Comunes de Odoo

  • res.partner: Contactos/Partners
  • res.users: Usuarios
  • res.company: Compañías
  • sale.order: Órdenes de venta
  • purchase.order: Órdenes de compra
  • account.move: Facturas/Asientos
  • stock.picking: Transferencias de inventario
  • product.product: Productos
  • project.project: Proyectos
  • hr.employee: Empleados

🤝 Contribuir

  1. Fork el proyecto
  2. Crear una rama feature (git checkout -b feature/AmazingFeature)
  3. Commit cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abrir un Pull Request

📄 Licencia

Este proyecto es de código abierto.

👤 Autor

Desarrollado para gestionar permisos y accesos en Odoo de forma programática.


¿Preguntas? Consulta la documentación interactiva en /docs después de iniciar el servidor.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages