71 lines
2.2 KiB
OpenEdge ABL
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)
|
|
);
|
|
}
|
|
} |