Hi Spica,
However, I have written a small job for you to copy roles from one user to another except system administrator role as this role does not have any content.
static void copyUserRoles(Args _args)
{
boolean ret = true;
SecurityRole securityRole;
SecurityUserRole securityUserRole;
SecurityUserRole securityUserRoleExist;
SecurityUserRole securityUserRoleInsert;
List copiedUserRoles = new List(Types::String);
ListEnumerator lEnumerator;
str 20 fromUser = 'faisal.f';
str 20 toUser = 'faisal.1';
try
{
while select securityUserRole
where securityUserRole.User == fromUser
notExists join * from securityUserRoleExist
where securityUserRoleExist.SecurityRole == securityUserRole.SecurityRole
&& securityUserRoleExist.User == toUser
{
select AotName, Name from securityRole where securityRole.RecId == securityUserRole.SecurityRole;
if(securityRole.AotName == '-SYSADMIN-' && !isSystemAdministrator())
continue;
copiedUserRoles.addStart(securityRole.Name);
securityUserRoleInsert.initValue();
securityUserRoleInsert.SecurityRole = securityUserRole.SecurityRole;
securityUserRoleInsert.User = toUser;
securityUserRoleInsert.insert();
securityUserRoleInsert.clear();
}
}
catch
{
ret = false;
}
if (ret)
{
lEnumerator = copiedUserRoles.getEnumerator();
if (copiedUserRoles.empty())
info(strFmt("User %1 and %2 has the same security roles",fromUser, toUser));
while (lEnumerator.moveNext())
{
info(strFmt('%1',lEnumerator.current()));
}
}
else
error(strFmt("Copying aborted"));
}