fix: solución de bloqueos y estandarización de permisos

This commit is contained in:
2026-04-27 10:47:30 -05:00
parent fa3cbb4d0a
commit 5c2a84e95d
312 changed files with 13889 additions and 7911 deletions

View File

@@ -11,4 +11,9 @@ router = TenantCRUDRoutes(
tags=["a76.general_catalogs.classification_concepts"],
resource_name="Classification Concept",
enable_list=True,
list_permissions=["cat_classification.view"],
get_permissions=["cat_classification.view"],
create_permissions=["cat_classification.create"],
update_permissions=["cat_classification.edit"],
delete_permissions=["cat_classification.delete"],
).router

View File

@@ -11,4 +11,9 @@ router = TenantCRUDRoutes(
tags=["a76.general_catalogs.concepts"],
resource_name="Concept",
enable_list=True,
list_permissions=["cat_concepts.view"],
get_permissions=["cat_concepts.view"],
create_permissions=["cat_concepts.create"],
update_permissions=["cat_concepts.edit"],
delete_permissions=["cat_concepts.delete"],
).router

View File

@@ -21,6 +21,11 @@ router = TenantCRUDRoutes(
enable_filters=True, # Enable filtering
default_page_size=50,
max_page_size=100,
list_permissions=["cat_broker_concepts.view"],
get_permissions=["cat_broker_concepts.view"],
create_permissions=["cat_broker_concepts.create"],
update_permissions=["cat_broker_concepts.edit"],
delete_permissions=["cat_broker_concepts.delete"],
).router

View File

@@ -7,9 +7,8 @@ from .dto import (
from .service import EquivalencyService, EquivalencyItemService
router = APIRouter(prefix="/equivalencies",
tags=["a76.general_catalogs.equivalencies"])
tags=["a76.general_catalogs.equivalencies"])
# Pool global de EquivalencyItems
item_crud = TenantCRUDRoutes(
service=EquivalencyItemService,
create_schema=EquivalencyItemCreate,
@@ -20,9 +19,13 @@ item_crud = TenantCRUDRoutes(
resource_name="EquivalencyItem",
enable_list=True,
enable_filters=True,
list_permissions=["cat_equivalencies.view"],
get_permissions=["cat_equivalencies.view"],
create_permissions=["cat_equivalencies.create"],
update_permissions=["cat_equivalencies.edit"],
delete_permissions=["cat_equivalencies.delete"],
)
# Catálogo de equivalencias (referencia item_id)
equivalency_crud = TenantCRUDRoutes(
service=EquivalencyService,
create_schema=EquivalencyCreate,
@@ -33,7 +36,12 @@ equivalency_crud = TenantCRUDRoutes(
resource_name="Equivalency",
enable_list=True,
enable_filters=True,
list_permissions=["cat_equivalencies.view"],
get_permissions=["cat_equivalencies.view"],
create_permissions=["cat_equivalencies.create"],
update_permissions=["cat_equivalencies.edit"],
delete_permissions=["cat_equivalencies.delete"],
)
router.include_router(item_crud.router)
router.include_router(equivalency_crud.router)
router.include_router(equivalency_crud.router)

View File

@@ -25,6 +25,12 @@ route_handler = TenantCRUDRoutes(
enable_filters=False,
default_page_size=50,
max_page_size=100,
# Permisos
list_permissions=["cat_exchange_rates.view"],
get_permissions=["cat_exchange_rates.view"],
create_permissions=["cat_exchange_rates.create"],
update_permissions=["cat_exchange_rates.edit"],
delete_permissions=["cat_exchange_rates.delete"],
)
crud_router = route_handler.router
@@ -68,7 +74,7 @@ async def list_exchange_rates(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user),
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, ["cat_exchange_rates.view"])
skip = (page - 1) * page_size
filters = {}

View File

@@ -27,7 +27,8 @@ async def list_fda_catalog(
current_user: Dict[str, Any] = Depends(get_current_user)
):
"""Listar entradas del catálogo FDA con búsqueda y paginación"""
tenant_id = validate_access_to_resource(db, company_id, current_user)
# 👇 PERMISO DE LECTURA 👇
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.view"])
filters = {"search": search} if search else {}
result = FDACatalogService.get_all(db, tenant_id, company_id, page, page_size, filters)
@@ -49,7 +50,8 @@ async def get_fda_catalog(
current_user: Dict[str, Any] = Depends(get_current_user)
):
"""Obtener una entrada del catálogo FDA por ID"""
tenant_id = validate_access_to_resource(db, company_id, current_user)
# 👇 PERMISO DE LECTURA 👇
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.view"])
entry = FDACatalogService.get_by_id(db, tenant_id, company_id, id)
if not entry:
@@ -68,6 +70,7 @@ async def get_fda_catalog(
"call_atl": entry.call_atl
}
from api.v1.modules.a76.general_catalogs.fda_catalog.dto import FDACatalogCreate, FDACatalogUpdate
from sqlalchemy.exc import IntegrityError
@@ -79,7 +82,8 @@ async def create_fda_catalog(
current_user: Dict[str, Any] = Depends(get_current_user)
):
"""Crear nueva entrada en el catálogo FDA"""
tenant_id = validate_access_to_resource(db, company_id, current_user)
# 👇 PERMISO DE CREACIÓN 👇
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.create"])
try:
return FDACatalogService.create(db, tenant_id, company_id, data)
except IntegrityError:
@@ -96,7 +100,8 @@ async def update_fda_catalog(
current_user: Dict[str, Any] = Depends(get_current_user)
):
"""Actualizar entrada del catálogo FDA"""
tenant_id = validate_access_to_resource(db, company_id, current_user)
# 👇 PERMISO DE EDICIÓN 👇
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.edit"])
try:
entry = FDACatalogService.update(db, tenant_id, company_id, id, data)
@@ -116,12 +121,14 @@ async def delete_fda_catalog(
current_user: Dict[str, Any] = Depends(get_current_user)
):
"""Eliminar entrada del catálogo FDA"""
tenant_id = validate_access_to_resource(db, company_id, current_user)
# 👇 PERMISO DE ELIMINACIÓN 👇
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.delete"])
success = FDACatalogService.delete(db, tenant_id, company_id, id)
if not success:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Entrada no encontrada")
return {"message": "Eliminado correctamente"}
from typing import List
from api.v1.modules.a76.general_catalogs.fda_catalog.service import FDADetailsService
from api.v1.modules.a76.general_catalogs.fda_catalog.dto import (
@@ -139,7 +146,7 @@ async def get_fda_specifications(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.view"])
catalog_entry = FDACatalogService.get_by_id(db, tenant_id, company_id, id)
if not catalog_entry:
raise HTTPException(status_code=404, detail="Catálogo FDA no encontrado")
@@ -154,7 +161,8 @@ async def save_fda_specifications(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
# Aquí usamos .edit porque estamos modificando un catálogo existente
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.edit"])
catalog_entry = FDACatalogService.get_by_id(db, tenant_id, company_id, id)
if not catalog_entry:
raise HTTPException(status_code=404, detail="Catálogo FDA no encontrado")
@@ -169,7 +177,7 @@ async def list_fda_constituent_elements(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.view"])
return FDADetailsService.get_constituent_elements(db, tenant_id, company_id, id)
@router.post("/{id}/constituent-elements", response_model=FDAConstituentElementsResponse)
@@ -180,7 +188,7 @@ async def create_fda_constituent_element(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.create"])
return FDADetailsService.create_constituent_element(db, tenant_id, company_id, id, data.model_dump())
@router.delete("/{id}/constituent-elements/{element_id}")
@@ -191,7 +199,7 @@ async def delete_fda_constituent_element(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.delete"])
success = FDADetailsService.delete_constituent_element(db, tenant_id, company_id, element_id)
if not success:
raise HTTPException(status_code=404, detail="Elemento no encontrado")
@@ -205,7 +213,7 @@ async def list_fda_affirmation_codes(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.view"])
return FDADetailsService.get_affirmation_codes(db, tenant_id, company_id, id)
@router.post("/{id}/affirmation-codes", response_model=FDAAffirmationCodesResponse)
@@ -216,7 +224,7 @@ async def create_fda_affirmation_code(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.create"])
return FDADetailsService.create_affirmation_code(db, tenant_id, company_id, id, data.model_dump())
@router.delete("/{id}/affirmation-codes/{code_id}")
@@ -227,7 +235,7 @@ async def delete_fda_affirmation_code(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.delete"])
success = FDADetailsService.delete_affirmation_code(db, tenant_id, company_id, code_id)
if not success:
raise HTTPException(status_code=404, detail="Código no encontrado")
@@ -241,7 +249,7 @@ async def list_fda_lot_productions(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.view"])
return FDADetailsService.get_lot_productions(db, tenant_id, company_id, id)
@router.post("/{id}/lot-productions", response_model=FDALotProductionResponse)
@@ -252,7 +260,7 @@ async def create_fda_lot_production(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.create"])
return FDADetailsService.create_lot_production(db, tenant_id, company_id, id, data.model_dump())
@router.delete("/{id}/lot-productions/{lot_id}")
@@ -263,8 +271,8 @@ async def delete_fda_lot_production(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user)
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
tenant_id = validate_access_to_resource(db, company_id, current_user, required_permissions=["goods_fda.delete"])
success = FDADetailsService.delete_lot_production(db, tenant_id, company_id, lot_id)
if not success:
raise HTTPException(status_code=404, detail="Lote no encontrado")
return {"message": "Eliminado correctamente"}
return {"message": "Eliminado correctamente"}

View File

@@ -25,6 +25,8 @@ def list_canadian_fractions(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_canadian.view"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
skip = (page - 1) * page_size
service = CanadianTariffFractionService(db)
@@ -50,6 +52,8 @@ def get_canadian_fraction(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_canadian.view"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
service = CanadianTariffFractionService(db)
item = service.get(id, tenant_id, company_id)
@@ -64,6 +68,8 @@ def create_canadian_fraction(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_canadian.create"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
service = CanadianTariffFractionService(db)
return service.create(item_in, tenant_id, company_id)
@@ -76,6 +82,8 @@ def update_canadian_fraction(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_canadian.edit"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
service = CanadianTariffFractionService(db)
item = service.get(id, tenant_id, company_id)
@@ -90,6 +98,8 @@ def delete_canadian_fraction(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_canadian.delete"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
service = CanadianTariffFractionService(db)
item = service.get(id, tenant_id, company_id)

View File

@@ -20,9 +20,8 @@ def get_historical_fractions(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
"""
Get all historical tariff fractions (paginated).
"""
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_historical.view"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
skip = (page - 1) * page_size
service = HistoricalTariffFractionService(db)
@@ -47,9 +46,8 @@ async def get_rate(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
"""
Get the historical tariff rate for a specific fraction, nico, and date.
"""
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_historical.view"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
# Parse date
@@ -82,9 +80,8 @@ def get_historical_fraction(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
"""
Get a historical tariff fraction by ID.
"""
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_historical.view"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
service = HistoricalTariffFractionService(db)
fraction = service.get(id, tenant_id, company_id)
@@ -99,9 +96,8 @@ def create_historical_fraction(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
"""
Create a new historical tariff fraction.
"""
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_historical.create"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
service = HistoricalTariffFractionService(db)
return service.create(fraction_in, tenant_id, company_id)
@@ -114,9 +110,8 @@ def update_historical_fraction(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
"""
Update a historical tariff fraction.
"""
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_historical.edit"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
service = HistoricalTariffFractionService(db)
fraction = service.get(id, tenant_id, company_id)
@@ -131,9 +126,8 @@ def delete_historical_fraction(
db: Session = Depends(get_core_db),
current_user = Depends(get_current_user)
):
"""
Delete a historical tariff fraction.
"""
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_historical.delete"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
service = HistoricalTariffFractionService(db)
fraction = service.get(id, tenant_id, company_id)

View File

@@ -8,7 +8,7 @@ from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from core.database import get_core_db
from core.security import get_current_user, get_tenant_from_token
from core.security import get_current_user, get_tenant_from_token, validate_access_to_resource
from .dto import (
TariffFractionCreateDTO,
@@ -36,6 +36,12 @@ async def list_tariff_fractions(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user),
):
# Validar permisos según el catálogo solicitado
if catalog in ["mex", "usa"]:
validate_access_to_resource(db, company_id, current_user, ["frac_sitar.view"])
elif catalog == "american":
validate_access_to_resource(db, company_id, current_user, ["frac_american.view"])
skip = (page - 1) * page_size
filters = {}
if search:
@@ -74,9 +80,12 @@ async def list_tariff_fractions(
)
async def get_tariff_fraction(
tariff_fraction_id: int,
company_id: int = Query(..., description="Company ID"),
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user),
):
# Por defecto asumimos vista de SITAR para este endpoint de consulta por ID general
validate_access_to_resource(db, company_id, current_user, ["frac_sitar.view"])
item = TariffFractionService.get_by_id(db, tariff_fraction_id)
if not item:
from fastapi import HTTPException
@@ -107,6 +116,7 @@ async def create_tariff_fraction(
tenant_id = current_user.get("tenant_id")
if catalog == "american":
validate_access_to_resource(db, company_id, current_user, ["frac_american.create"])
from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.service import USTariffFractionService
from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.dto import USTariffFractionCreateDTO
import re
@@ -159,6 +169,7 @@ async def update_tariff_fraction(
tenant_id = current_user.get("tenant_id")
if catalog == "american":
validate_access_to_resource(db, company_id, current_user, ["frac_american.edit"])
from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.service import USTariffFractionService
from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.dto import USTariffFractionUpdateDTO
import re
@@ -204,6 +215,7 @@ async def delete_tariff_fraction(
tenant_id = current_user.get("tenant_id")
if catalog == "american":
validate_access_to_resource(db, company_id, current_user, ["frac_american.delete"])
from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.service import USTariffFractionService
success = USTariffFractionService.delete(db, tariff_fraction_id, tenant_id, company_id)
if not success:

View File

@@ -28,6 +28,10 @@ crud_router = TenantCRUDRoutes(
resource_name="US Tariff Fraction",
id_name="id",
enable_list=False, # We implement our custom list endpoint
create_permissions=["frac_american.create"],
update_permissions=["frac_american.edit"],
delete_permissions=["frac_american.delete"],
get_permissions=["frac_american.view"],
)
# Master router with prefix so all routes live under /us-tariff-fractions
@@ -52,6 +56,8 @@ async def list_us_tariff_fractions(
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user),
):
from core.security import validate_access_to_resource as validate_perm
validate_perm(db, company_id, current_user, ["frac_american.view"])
tenant_id = validate_access_to_resource(db, company_id, current_user)
skip = (page - 1) * page_size

View File

@@ -18,7 +18,12 @@ identifier_crud = TenantCRUDRoutes(
prefix="",
tags=["Identifiers"],
resource_name="Identifier",
enable_list=True
enable_list=True,
list_permissions=["cat_identifiers.view"],
get_permissions=["cat_identifiers.view"],
create_permissions=["cat_identifiers.create"],
update_permissions=["cat_identifiers.edit"],
delete_permissions=["cat_identifiers.delete"],
)
# Identifier Detail CRUD
@@ -29,7 +34,12 @@ detail_crud = TenantCRUDRoutes(
service=IdentifierDetailService,
prefix="/details",
tags=["Identifier Details"],
resource_name="Identifier Detail"
resource_name="Identifier Detail",
list_permissions=["cat_identifiers.view"],
get_permissions=["cat_identifiers.view"],
create_permissions=["cat_identifiers.create"],
update_permissions=["cat_identifiers.edit"],
delete_permissions=["cat_identifiers.delete"],
)
router.include_router(identifier_crud.router)

View File

@@ -13,4 +13,10 @@ router = TenantCRUDRoutes(
tags=["a76.general_catalogs.inpc"],
resource_name="INPC",
enable_list=True,
# Permisos
list_permissions=["cat_inpc.view"],
get_permissions=["cat_inpc.view"],
create_permissions=["cat_inpc.create"],
update_permissions=["cat_inpc.edit"],
delete_permissions=["cat_inpc.delete"],
).router

View File

@@ -13,4 +13,9 @@ router = TenantCRUDRoutes(
tags=["a76.general_catalogs.legends"],
resource_name="Legend",
enable_list=True,
list_permissions=["cat_legends.view"],
get_permissions=["cat_legends.view"],
create_permissions=["cat_legends.create"],
update_permissions=["cat_legends.edit"],
delete_permissions=["cat_legends.delete"],
).router

View File

@@ -16,6 +16,11 @@ multi_currency_type_crud = TenantCRUDRoutes(
tags=["Multi Currency Types"],
resource_name="MultiCurrencyType",
enable_list=True,
list_permissions=["cat_multi_currency_types.view"],
get_permissions=["cat_multi_currency_types.view"],
create_permissions=["cat_multi_currency_types.create"],
update_permissions=["cat_multi_currency_types.edit"],
delete_permissions=["cat_multi_currency_types.delete"],
)
router.include_router(multi_currency_type_crud.router)

View File

@@ -21,4 +21,10 @@ router = TenantCRUDRoutes(
enable_filters=True, # Enable filtering by key and description_es
default_page_size=50,
max_page_size=100,
# Permisos
list_permissions=["cat_packages.view"],
get_permissions=["cat_packages.view"],
create_permissions=["cat_packages.create"],
update_permissions=["cat_packages.edit"],
delete_permissions=["cat_packages.delete"],
).router

View File

@@ -14,4 +14,9 @@ router = TenantCRUDRoutes(
resource_name="Port",
enable_list=True,
max_page_size=1000,
list_permissions=["cat_ports.view"],
get_permissions=["cat_ports.view"],
create_permissions=["cat_ports.create"],
update_permissions=["cat_ports.edit"],
delete_permissions=["cat_ports.delete"],
).router

View File

@@ -21,4 +21,9 @@ router = TenantCRUDRoutes(
enable_filters=True, # Enable filtering by seal
default_page_size=50,
max_page_size=100,
list_permissions=["cat_seals.view"],
get_permissions=["cat_seals.view"],
create_permissions=["cat_seals.create"],
update_permissions=["cat_seals.edit"],
delete_permissions=["cat_seals.delete"],
).router

View File

@@ -20,4 +20,9 @@ router = TenantCRUDRoutes(
enable_filters=True,
default_page_size=50,
max_page_size=100,
list_permissions=["cat_sectors.view"],
get_permissions=["cat_sectors.view"],
create_permissions=["cat_sectors.create"],
update_permissions=["cat_sectors.edit"],
delete_permissions=["cat_sectors.delete"],
).router

View File

@@ -13,4 +13,9 @@ router = TenantCRUDRoutes(
id_name="id",
enable_list=True,
enable_filters=True,
list_permissions=["cat_unit_conversions.view"],
get_permissions=["cat_unit_conversions.view"],
create_permissions=["cat_unit_conversions.create"],
update_permissions=["cat_unit_conversions.edit"],
delete_permissions=["cat_unit_conversions.delete"],
).router

View File

@@ -18,6 +18,12 @@ ace_router = TenantCRUDRoutes(
enable_list=True,
enable_filters=True,
max_page_size=10000,
# Permisos
list_permissions=["cat_um_ace.view"],
get_permissions=["cat_um_ace.view"],
create_permissions=["cat_um_ace.create"],
update_permissions=["cat_um_ace.edit"],
delete_permissions=["cat_um_ace.delete"],
).router
router.include_router(ace_router)
@@ -34,6 +40,12 @@ oma_router = TenantCRUDRoutes(
enable_list=True,
enable_filters=True,
max_page_size=10000,
# Permisos
list_permissions=["cat_um_oma.view"],
get_permissions=["cat_um_oma.view"],
create_permissions=["cat_um_oma.create"],
update_permissions=["cat_um_oma.edit"],
delete_permissions=["cat_um_oma.delete"],
).router
router.include_router(oma_router)
@@ -50,6 +62,12 @@ american_router = TenantCRUDRoutes(
enable_list=True,
enable_filters=True,
max_page_size=10000,
# Permisos
list_permissions=["cat_um_american.view"],
get_permissions=["cat_um_american.view"],
create_permissions=["cat_um_american.create"],
update_permissions=["cat_um_american.edit"],
delete_permissions=["cat_um_american.delete"],
).router
router.include_router(american_router)
@@ -66,6 +84,12 @@ customs_router = TenantCRUDRoutes(
enable_list=True,
enable_filters=True,
max_page_size=10000,
# Permisos
list_permissions=["cat_um_customs.view"],
get_permissions=["cat_um_customs.view"],
create_permissions=["cat_um_customs.create"],
update_permissions=["cat_um_customs.edit"],
delete_permissions=["cat_um_customs.delete"],
).router
router.include_router(customs_router)
@@ -82,6 +106,12 @@ general_router = TenantCRUDRoutes(
enable_list=True,
enable_filters=True,
max_page_size=10000,
# Permisos
list_permissions=["cat_um_general.view"],
get_permissions=["cat_um_general.view"],
create_permissions=["cat_um_general.create"],
update_permissions=["cat_um_general.edit"],
delete_permissions=["cat_um_general.delete"],
).router
router.include_router(general_router)
@@ -99,5 +129,11 @@ main_router = TenantCRUDRoutes(
enable_list=True,
enable_filters=True,
max_page_size=10000,
# Permisos
list_permissions=["cat_um_general.view"],
get_permissions=["cat_um_general.view"],
create_permissions=["cat_um_general.create"],
update_permissions=["cat_um_general.edit"],
delete_permissions=["cat_um_general.delete"],
).router
router.include_router(main_router)