Showing posts with label Assign User Role. Show all posts
Showing posts with label Assign User Role. Show all posts

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);
}
}