En Dynamics 365 Business Central no es fácil verificar si un usuario tiene un permiso específico sobre un objeto específico.
La tabla de Permission Range ahora es una tabla del sistema que no se puede usar en un entorno SaaS, la tabla de License Permission no le otorga permisos de usuario específicos y utiliza los métodos ReadPermission y WritePermission (que pueden determinar si un usuario tiene permiso de lectura y escritura en el objeto) solo está disponible para objetos de tabla y, a menudo, esto no es suficiente si tiene que implementar complejas comprobaciones de seguridad (por ejemplo, si desea probar si su usuario tiene permisos de ejecución en una codeunit específica).
Para lograr ese objetivo, ahora podemos usar la codeunit Id 9852 Effective Permissions Mgt. ,que tiene una función llamada PopulatePermissionRecordWithEffectivePermissionsForObject que le permite ocupar un registro de Permiso para un objeto específico y un usuario específico. Este método tiene la siguiente estructura:
Para mostrar cómo usar este método, creamos un procedimiento que recibe como entrada el objeto para verificar los permisos y luego recupera los permisos para el usuario específico en este objeto. El código es el siguiente:
Como podemos ver, PopulatePermissionRecordWithEffectivePermissionsForObject recibe los parámetros necesarios y completa el registro de permiso temporal que estamos pasando. Luego puede verificar el registro de permisos recién creado según lo necesite (aquí, por ejemplo, estoy verificando el permiso de Ejecución y si el usuario no tiene permiso de ejecución en el objeto dado, podemos actuar como consecuencia).
Para llamar al procedimiento CheckUserPermission anterior para un objeto específico (por ejemplo, la codeunit 80 – Sales Post), podemos hacer lo siguiente:
Espero que os sirva de ayuda. ?
Programación Dynamics
ABD Consultoría y Soluciones Informáticas