Skip to content

[FIX] partner_creation_access: no bloquear creaciones en modo superusuario - #146

Closed
ALopez-Adhoc wants to merge 1 commit into
ingadhoc:19.0from
adhoc-dev:19.0-h-121712-loa
Closed

[FIX] partner_creation_access: no bloquear creaciones en modo superusuario#146
ALopez-Adhoc wants to merge 1 commit into
ingadhoc:19.0from
adhoc-dev:19.0-h-121712-loa

Conversation

@ALopez-Adhoc

Copy link
Copy Markdown
Contributor

Problema

En el checkout express de website_sale, un usuario portal no podía completar el pago con el proveedor demo: al clickear "Pay" el botón no hacía nada. Con debug=assets aparecía el popup "You don't have access to create contacts. Only users with the 'Contact Creation' access can do it."

El JS del proveedor demo envía un billing address, y website_sale/controllers/main.py::process_express_checkout crea la dirección de facturación con request.env['res.partner'].sudo().create(...) cuando no matchea ninguna dirección existente del partner.

El override de res.partner.create de este módulo lanzaba UserError para cualquier usuario que no fuera base.group_partner_manager ni base.group_public, incluso bajo sudo(), porque la condición miraba self.env.user (el portal) e ignoraba self.env.su.

Sin debug, el error del frontend lo traga swallowAllVisitorErrors para usuarios no internos, así que el síntoma visible era "el botón no hace nada"; el UserError igual quedaba en el log del server.

Solución

Se agrega el guard not self.env.su a la condición del create(), siguiendo el mismo patrón que el core de Odoo (res.partner). Los flujos de sistema que elevan privilegios a propósito (como el express checkout) quedan permitidos, mientras que la creación interactiva de contactos desde la UI (donde env.su es False) sigue restringida a usuarios con el acceso 'Contact Creation'.

No se suma group_portal a la whitelist: el objetivo del módulo sigue siendo bloquear la creación interactiva de contactos desde la interfaz.

Cambios

  • partner_creation_access/models/res_partner.py: guard not self.env.su en create().
  • partner_creation_access/__manifest__.py: bump de versión 19.0.1.1.019.0.1.1.1.
  • partner_creation_access/tests/: tests nuevos que cubren ambos casos.

Test plan

Tests unitarios (TransactionCase) con un usuario solo del grupo Portal:

  • test_create_partner_portal_with_sudo: crear res.partner en modo sudo → permitido (replica el flujo del express checkout).
  • test_create_partner_portal_without_sudo: crear res.partner con permisos propios (sin sudo) → sigue lanzando UserError.

Ambos tests pasan (0 failed, 0 error(s) of 2 tests).

…uario

El override de res.partner.create lanzaba UserError para cualquier usuario
que no fuera partner manager ni public, incluso cuando la creacion se hacia
en modo superusuario (self.env.su). Esto rompia el express checkout de
website_sale: al pagar con el proveedor demo, un usuario portal no podia
completar el pago porque process_express_checkout crea la direccion de
facturacion con res.partner.sudo().create(), y el chequeo miraba
self.env.user (portal) ignorando self.env.su.

Se agrega el guard "not self.env.su" a la condicion, siguiendo el mismo
patron que el core de Odoo (res.partner). Asi los flujos de sistema que
elevan privilegios a proposito quedan permitidos, mientras que la creacion
interactiva de contactos desde la UI (donde env.su es False) sigue
restringida a usuarios con el acceso 'Contact Creation'.

Se agregan tests que cubren ambos casos: portal + sudo permitido, portal
sin sudo bloqueado.
Copilot AI review requested due to automatic review settings July 16, 2026 16:32
@roboadhoc

Copy link
Copy Markdown

Pull request status dashboard

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Este PR ajusta el módulo partner_creation_access para que no bloquee creaciones de res.partner cuando el flujo eleva privilegios intencionalmente (modo superusuario), evitando que el express checkout de website_sale falle silenciosamente para usuarios portal.

Changes:

  • Se agrega un guard not self.env.su en el override de res.partner.create() para permitir creaciones bajo sudo().
  • Se bumpea la versión del módulo.
  • Se agregan tests unitarios para cubrir el caso portal con y sin sudo().

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
partner_creation_access/models/res_partner.py Ajusta la condición de bloqueo para no aplicar en modo superusuario.
partner_creation_access/manifest.py Bump de versión del módulo.
partner_creation_access/tests/init.py Habilita la carga del paquete de tests.
partner_creation_access/tests/test_partner_creation_access.py Agrega cobertura para creación permitida con sudo() y bloqueo sin sudo().
Comments suppressed due to low confidence (1)

partner_creation_access/models/res_partner.py:22

  • El mensaje de UserError es texto visible al usuario y ahora mismo no es traducible (no está envuelto en ()/self.env.()). Para que salga en el .pot/.po y pueda traducirse, envolvé el string con self.env._().
            raise UserError(
                "You don't have access to create contacts. Only users with the 'Contact Creation' access can do it."
            )

Comment thread partner_creation_access/models/res_partner.py
Comment thread partner_creation_access/tests/test_partner_creation_access.py
@mav-adhoc

Copy link
Copy Markdown
Contributor

@roboadhoc r+ nobump

@roboadhoc

Copy link
Copy Markdown

@ALopez-Adhoc @mav-adhoc linked pull request(s) ingadhoc/website#467 not ready. Linked PRs are not staged until all of them are ready.

@mav-adhoc

Copy link
Copy Markdown
Contributor

@roboadhoc r+ nobump

@roboadhoc

Copy link
Copy Markdown

This PR is already reviewed, reviewing it again is useless.

roboadhoc pushed a commit that referenced this pull request Jul 24, 2026
…uario

El override de res.partner.create lanzaba UserError para cualquier usuario
que no fuera partner manager ni public, incluso cuando la creacion se hacia
en modo superusuario (self.env.su). Esto rompia el express checkout de
website_sale: al pagar con el proveedor demo, un usuario portal no podia
completar el pago porque process_express_checkout crea la direccion de
facturacion con res.partner.sudo().create(), y el chequeo miraba
self.env.user (portal) ignorando self.env.su.

Se agrega el guard "not self.env.su" a la condicion, siguiendo el mismo
patron que el core de Odoo (res.partner). Asi los flujos de sistema que
elevan privilegios a proposito quedan permitidos, mientras que la creacion
interactiva de contactos desde la UI (donde env.su es False) sigue
restringida a usuarios con el acceso 'Contact Creation'.

Se agregan tests que cubren ambos casos: portal + sudo permitido, portal
sin sudo bloqueado.

closes #146

Signed-off-by: Matias Velazquez <mav@adhoc.com.ar>
@roboadhoc roboadhoc closed this in d9c0c84 Jul 24, 2026
@roboadhoc
roboadhoc deleted the 19.0-h-121712-loa branch July 24, 2026 15:18
@roboadhoc roboadhoc added the 18.1 label Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants