Friday, 27 November 2015

Assign roles from one user to another


Sometimes while testing the security roles we need to have exactly the same roles a user have. The following piece of code will assign the security roles of a user to another (while keeping the existing roles intact).

static void CopyRolesFromUserToAnotherUser(Args _args)  
{
SecurityRole securityRole;
SecurityUserRole securityUserRoleSource;
SecurityUserRole securityUserRoleDestination;
SecurityUserRole securityUserRoleDestinationNew;
boolean added;
UserId sourceUserId = 'User 1';
UserId destinationUserId = 'User 2';

str getFormattedRoleName(str _roleName)
{
return SysLabel::labelId2String2(_roleName, CompanyInfo::languageId());
}

while select securityUserRoleSource
where securityUserRoleSource.User == sourceUserId
join securityRole
where securityUserRoleSource.SecurityRole == securityRole.RecId
notexists join securityUserRoleDestination
where securityUserRoleDestination.SecurityRole == securityRole.RecId
&& securityUserRoleDestination.User == destinationUserId
{
info(strFmt('Adding role %1 to the user %2.', getFormattedRoleName(securityRole.Name), destinationUserId));

securityUserRoleDestinationNew.clear();
securityUserRoleDestinationNew.User = destinationUserId;
securityUserRoleDestinationNew.SecurityRole = securityRole.RecId;
securityUserRoleDestinationNew.AssignmentMode = RoleAssignmentMode::Manual;
securityUserRoleDestinationNew.AssignmentStatus = RoleAssignmentStatus::Enabled;

SecuritySegregationOfDuties::assignUserToRole(securityUserRoleDestinationNew, null);
}
}

No comments:

Post a Comment