Last active
September 22, 2023 14:05
-
-
Save renatoliveira/4ab5e37f73db426b3b9d7e26708713c4 to your computer and use it in GitHub Desktop.
Transfer Permissions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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