SyncMadeEasy/force-app/main/default/classes/SmePermissionSetAssignmentQ...

71 lines
2.2 KiB
OpenEdge ABL

public class SmePermissionSetAssignmentQueueable implements Queueable {
private Set<Id> userIds;
public SmePermissionSetAssignmentQueueable(Set<Id> userIds) {
this.userIds = userIds;
}
public void execute(QueueableContext context) {
if(userIds == null || userIds.isEmpty()) return;
List<PermissionSet> psList = [
SELECT Id
FROM PermissionSet
WHERE Name = 'Shopify_Made_Easy_Modify_All'
LIMIT 1
];
if(psList.isEmpty()) return;
Id psId = psList[0].Id;
Set<Id> eligibleUserIds = new Set<Id>();
for(User u : [
SELECT Id
FROM User
WHERE Id IN :userIds
AND IsActive = true
AND UserType = 'Standard'
]) {
eligibleUserIds.add(u.Id);
}
if(eligibleUserIds.isEmpty()) return;
Set<Id> alreadyAssignedUsers = new Set<Id>();
for(PermissionSetAssignment psa : [
SELECT AssigneeId
FROM PermissionSetAssignment
WHERE AssigneeId IN :eligibleUserIds
AND PermissionSetId = :psId
]) {
alreadyAssignedUsers.add(psa.AssigneeId);
}
List<PermissionSetAssignment> psaList = new List<PermissionSetAssignment>();
for(Id userId : eligibleUserIds) {
if(!alreadyAssignedUsers.contains(userId)) {
psaList.add(new PermissionSetAssignment(
AssigneeId = userId,
PermissionSetId = psId
));
}
}
if(!psaList.isEmpty()) {
Database.SaveResult[] results = Database.insert(psaList, false);
for(Integer i = 0; i < results.size(); i++) {
if(!results[i].isSuccess()) {
System.debug(LoggingLevel.WARN,
'PermissionSetAssignment failed for AssigneeId=' + psaList[i].AssigneeId
+ ' errors=' + results[i].getErrors());
}
}
}
}
public static void assignPermissionSet(Set<Id> userIds) {
System.enqueueJob(
new SmePermissionSetAssignmentQueueable(userIds)
);
}
}