Showing posts with label Security Privilege in D365FO. Show all posts
Showing posts with label Security Privilege in D365FO. Show all posts

Monday, June 24, 2024

Check Security Privilege is assigned or not for that User iusing X++

 

Below method will help to check security Privileges assigned for that user.

public static boolean hasUserSecurityPrivilege(SecurityPrivilegeName _securityPrivilege, UserId _userId = curUserId())

{

  SecurityRolePrivilegeExplodedGraph securityRolePrivilegeExplodedGraph;

  SecurityUserRole securityUserRole;

  SecurityPrivilege securityPrivilege;

  select firstonly securityPrivilege

    where securityPrivilege.Identifier == _securityPrivilege

  exists join securityRolePrivilegeExplodedGraph

    where securityRolePrivilegeExplodedGraph.SecurityPrivilege == securityPrivilege.RecId

  exists join securityUserRole

    where securityUserRole.SecurityRole == securityRolePrivilegeExplodedGraph.SecurityRole

       && securityUserRole.User == _userId

       && securityUserRole.AssignmentStatus == RoleAssignmentStatus::Enabled

       && (securityUserRole.ValidFrom < DateTimeUtil::utcNow() || securityUserRole.ValidFrom == utcDateTimeNull())

       && (securityUserRole.ValidTo > DateTimeUtil::utcNow() || securityUserRole.ValidTo == utcDateTimeNull());

  return securityPrivilege.RecId != 0;

}


Orelse you can use below method also with dummy control in form

Logic to implement user has specific privilege through code:

Created one dummy form control with visibility false and need permission manual and created privilege using below logic we can verify the access.

SecurityRights securityRights = SecurityRights::construct();

        maxAccess = securityRights.formControlAccessRight(formStr(SalesTable), formControlStr(SalesTable, QTQSalesStatus));

=============

verify user has specific role assigned or not.

if (xUserInfo::checkUserRole(roleStr(InventMaterialsManager))

            || xUserInfo::checkUserRole(roleStr(InventQualityControlManager)) 

            || xUserInfo::checkUserRole(roleStr(WMSWarehouseManager)) 

            || Global::isSystemAdministrator())