Skip to content

Instantly share code, notes, and snippets.

@renatoliveira
Last active September 22, 2023 14:05
Show Gist options
  • Save renatoliveira/4ab5e37f73db426b3b9d7e26708713c4 to your computer and use it in GitHub Desktop.
Save renatoliveira/4ab5e37f73db426b3b9d7e26708713c4 to your computer and use it in GitHub Desktop.
Transfer Permissions
// 1. Erases permissions from current user
// 2. Copies permission set licenses and permission sets from another user.
// Rollback available at the end of the script.
Savepoint sp = Database.setSavepoint();
String fromUser = '[from username]';
String toUser = '[to username]';
// clean the user
delete [SELECT Id FROM PermissionSetAssignment WHERE AssigneeId IN (
SELECT Id FROM User WHERE Username = :toUser) AND PermissionSet.IsOwnedByProfile = FALSE];
delete [SELECT Id FROM PermissionSetLicenseAssign WHERE AssigneeId IN (
SELECT Id FROM User WHERE Username = :toUser)];
// copy permissions from the other user
List<PermissionSetLicenseAssign> pslas = [
SELECT Id, PermissionSetLicenseId
FROM PermissionSetLicenseAssign
WHERE AssigneeId IN (
SELECT Id FROM User WHERE Username = :fromUser)
];
List<PermissionSetAssignment> psas = [
SELECT Id, PermissionSetId
FROM PermissionSetAssignment
WHERE AssigneeId IN (
SELECT Id FROM User WHERE Username = :fromUser)
AND PermissionSet.IsOwnedByProfile = FALSE
];
User targetUser = [SELECT Id FROM User WHERE Username = :toUser];
// Assign copies
for (PermissionSetLicenseAssign psla : pslas) {
psla.Id = null;
psla.AssigneeId = targetUser.Id;
}
for (PermissionSetAssignment psa : psas) {
psa.Id = null;
psa.AssigneeId = targetUser.Id;
}
Database.insert(pslas, false);
Database.insert(psas, false);
//Database.rollback(sp);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment