Permisos personalizados y reglas de validación mas sencillas

El dia de hoy vamos a conocer una funcionalidad un poco subutilizada que nos ofrece la plataforma. Son los Permisos personalizados.

Contexto

Un perfil está compuesto por casillas de seleccion que dan acceso a funcionalidades especificas. Por ejemplo, el permiso API activada

o el permiso Ver todos los datos

Hay situaciones donde quisieramos poder contar con un permiso como Modificar fecha de cierre de la oportunidad, y asignarselo solo a los usuarios indicados.

Normalmente este requirimiento de negocio, se aborda con una regla de validación como la siguiente

Vemos que se valida si el campo ya estaba lleno y si se está modificando

NOT(ISBLANK(PRIORVALUE(CloseDate))) && ISCHANGED(CloseDate) 

Y se pregunta si el perfil del usuario realizando la acción se llama Administrador del sistema

$Profile.Name <> 'Administrador del sistema'

Está es una solución completamente valida, pero empieza a presentar algunos incovenientes.

  • Qué pasa si se deben autorizar mas perfiles o usuarios especificos
  • Qué pasa si la instancia es multilenguaje.

Si se van a agregar mas perfiles, la regla podria terminar viendose así:

NOT(ISBLANK(PRIORVALUE(CloseDate)))&&
ISCHANGED(CloseDate) &&
$Profile.Name <> 'Administrador del sistema' &&
$Profile.Name <> 'Administrador del contrato' &&
$Profile.Name <> 'Administrador de soluciones' &&
$Profile.Name <> 'Custom: Support Profile' &&
$Profile.Name <> 'Gold Partner User' &&
$Profile.Name <> 'Partner Community User'

Y que al pasar el tiempo, podría crecer en longitud acercandose al límite de 5000 caracteres.

Si la instancia es multilenguaje, el nombre de los perfiles estándar se traduce al cambiar el idioma de la instancia, algo que no debería ocurrir con frecuencia, pero que al poder presentarse haría que Administrador del sistema se convierta en System Administrator y la regla de validación deje de funcionar.

Cómo usar permisos personalizados

En esta entrada proponemos una solución que tiene en cuenta estos escenarios y permite ser escalable facilmente.

Empezamos creando el permiso personalizado.

Vamos a configuración, y escribimos en busqueda rápida, Permisos personalizados

Seleccionamos y damos click en nuevo

Asignamos una valor en Etiqueta que sea corto y descriptivo y en el campo descripción explicamos su uso. Podemos seguir el ejemplo que vimos con el permiso API Activada .

Damos guardar.

Ya contamos con un permiso que podemos usar en la regla de validación.

Al volver a la regla, y dar click en insertar campo, en la sección Permission, vamos a encontrar nuestro permiso personalizado.

Y nuestra fórmula va a quedar así

NOT(ISBLANK(PRIORVALUE(CloseDate)))&&
ISCHANGED(CloseDate) &&
NOT($Permission.Modificar_Fecha_Cierre_Oportunidad)

Ahora solo nos resta, asignar este permiso a los perfiles que necesitemos. Es aqui donde vemos el poder de los permisos personalizados.

Para esto vamos al perfil, y damos click en Permisos personalizados, como se ve en la imagen

Para asignarlo, damos click en modificar y lo pasamos de la sección de Permisos personalizados disponibles a la de Permisos personalizados activados

Ahora nuestra sencilla expresión

$Permission.Modificar_Fecha_Cierre_Oportunidad

Devolvera verdadero si el perfil del usuario tiene este permiso y falso de lo contrario.

Podemos asignar este permiso a cuanto perfil deseamos, y automaticamente los usuarios con este perfil podrán, en este caso, cambiar la fecha de cierre de las oportunidades y nuestra regla de validación no tuvo que ser modificada.

Notas

  • Si deseamos asignar el permiso a un usuario específico y no a todos los de un perfil, podemos crear un conjunto de permisos y agregar de la misma manera que vimos con el perfil, el permiso al conjunto de permisos, y luego asignar el conjunto de permisos al usuario en particular.
  • Podemos validar permisos personalizados tambien a nivel de visualforce usando el campo de combinación global $Permission seguido del nombre API del permiso.
<apex:pageBlock rendered="{!$Permission.nombre_api_permiso}">
   <!-- Sección que solo se mostrará a los usuarios con el permiso adecuado-->
</apex:pageBlock>
  • Podemos validar permisos a nivel de Apex, usando el método FeatureManagement.checkPermission y pasando el nombre API del permiso
Boolean tienePermiso = FeatureManagement.checkPermission('<nombre_api_permiso>');

if (tienePermiso) {
    // Ejecutar código
}

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s