with sharing, without sharing e inherited sharing
El sharing decide qué registros ve cada usuario. Una clase de Apex elige, con dos palabras en su cabecera, si lo respeta o no. La regla profesional: no dejarlo al valor por defecto, que además ha cambiado.
✓ En esta sub-lección
- 01Explicar qué hace cada una de las tres declaraciones de sharing.
- 02Elegir la declaración según lo que la clase tiene que mostrar.
- 03Saber qué pasa cuando no se declara nada, según la versión de la API.
La nutria: ¿Te acuerdas? · Repaso del Módulo 11
En el servicio REST del Módulo 11 escribiste global with sharing class. ¿Para qué era with sharing?
Antes de pasar el puente a producción, el equipo de Seguridad lo audita. Primer hallazgo: un comercial abre el panel «Mis renovaciones» y ve las de toda la empresa, incluidas las de cuentas que no son suyas. En la interfaz, el sharing se lo impediría. El código no se lo impide, porque nadie le dijo que lo respetara.
Tres declaraciones
| En la cabecera | Qué registros ve la clase | Úsala cuando… |
|---|---|---|
| with sharing | Los que puede ver el usuario: OWD, jerarquía de roles, reglas de sharing. | El resultado se le enseña a un usuario. Es tu opción habitual. |
| without sharing | Todos, los pueda ver el usuario o no. | El proceso necesita la foto completa: un total para Dirección, un trabajo nocturno. Con un comentario que diga por qué. |
| inherited sharing | Lo que decida quien la llama; si nadie la llama, como with sharing. | Una utilidad que usan clases de los dos tipos. |
- Acme 2026 · de Anadevuelta
- Globex 2026 · de Anadevuelta
- Initech 2026 · de Luisno devuelta
- Umbrella 2026 · de Luisno devuelta
- Hooli 2026 · de Martano devuelta
La consulta devuelve 2 de 5 renovaciones.
La clase respeta el sharing de quien la ejecuta.
Si no declaras nada
Aquí hay historia. Hasta la versión 66 de la API, una clase sin declaración se ejecutaba sin sharing cuando era el punto de entrada: por eso tanto código antiguo enseña más de la cuenta. Desde la versión 67 (Summer '26), una clase sin declaración usa with sharing. Como en una org conviven clases de muchas versiones, la regla profesional es no depender de ese valor: escribe siempre una de las tres. Y un detalle que no cambia: un trigger se ejecuta siempre con todo el poder, y es la clase a la que llama la que decide.
La nutria: ¿Y por qué no un Flow? Porque Flow te hace la misma pregunta