CRUD y FLS: comprobar antes de tocar
Los permisos de objeto (crear, leer, editar, borrar) y la seguridad a nivel de campo los configuras tú en perfiles y permission sets. El código en modo sistema no los mira, así que tiene que preguntarlo antes de leer o guardar.
✓ En esta sub-lección
- 01Distinguir sharing, permisos de objeto (CRUD) y seguridad a nivel de campo (FLS).
- 02Preguntar a Schema si el usuario puede hacer una operación sobre un objeto o un campo.
- 03Rechazar la operación con un mensaje claro cuando no puede.
La nutria: ¿Te acuerdas? · Repaso de la lección 1
¿Qué decide with sharing?
Segundo hallazgo de la auditoría: un becario tiene un perfil de solo lectura sobre Opportunity y el campo Discount__c oculto. Desde el panel, pulsa «Aplicar descuento» y el descuento se guarda. En la interfaz no podría ni ver el campo. El código lo ha hecho por él, porque en nadie pregunta.
Tres capas, tres preguntas
| Capa | Pregunta | Dónde lo configuras tú |
|---|---|---|
| Permisos de objeto (CRUD) | ¿Puede crear, leer, editar o borrar este objeto? | Perfil o permission set → Object Settings |
| Seguridad a nivel de campo (FLS) | ¿Puede ver o editar este campo? | Field-Level Security del campo |
| Sharing | ¿Puede ver este registro? | OWD, roles, reglas de sharing |
Preguntárselo a Schema
// Permisos de objeto
Schema.sObjectType.Opportunity.isAccessible(); // ¿leer?
Schema.sObjectType.Opportunity.isCreateable(); // ¿crear?
Schema.sObjectType.Opportunity.isUpdateable(); // ¿editar?
Schema.sObjectType.Opportunity.isDeletable(); // ¿borrar?
// Seguridad a nivel de campo
Schema.sObjectType.Opportunity.fields.Discount__c.isAccessible(); // ¿ver el campo?
Schema.sObjectType.Opportunity.fields.Discount__c.isUpdateable(); // ¿editarlo?PERMISOS DEL USUARIO
EL CÓDIGO
- Opportunity.isUpdateable()false
- fields.Discount__c.isUpdateable()false
RenewalSecurityException: No tienes permiso para editar oportunidades
La nutria: Tus permisos, que el código tiene que respetar
La nutria: ¿Y por qué no un Flow? Porque en Flow depende del mismo ajuste