Add and remove Members to permission set which adds and removes them automatically to public group
Add and remove Members to permission set which adds and
removes them automatically to public group
Permission Set Used:test_permission_set
GroupId Used:00Zx0000002ABCD
Code below:
global class AssignPermissionSetBatch implements
Database.Batchable<SObject>{
// Start Method
global
Database.QueryLocator
start(Database.BatchableContext bc){
system.debug([SELECT AssigneeId,Id,PermissionSetId,SystemModstamp FROM
PermissionSetAssignment WHERE PermissionSetId IN ( SELECT Id FROM PermissionSet
WHERE Name = 'test_permission_set')]);
return
Database.getQueryLocator([SELECT AssigneeId,Id,PermissionSetId,SystemModstamp
FROM PermissionSetAssignment WHERE PermissionSetId IN ( SELECT Id FROM
PermissionSet WHERE Name = 'test_permission_set')]);
}
// Execute Logic
global void
execute(Database.BatchableContext bc,
List<PermissionSetAssignment>scope){
List<GroupMember> GMlist = new List<GroupMember>();
List<GroupMember> GMDeletelist = new List<GroupMember>();
system.debug('PermissionSetAssignment'+bc);
set<Id>
MemberswithPermissionSetToday = new set<Id>();
set<Id>
totalPermissionSetAssignes= new set<Id>();
set<Id>
totalGroupMembersSet= new set<Id>();
system.debug('scope'+scope);
for(PermissionSetAssignment ps:scope){
if(ps.SystemModstamp > system.today()){
MemberswithPermissionSetToday.add(ps.AssigneeId);
}
totalPermissionSetAssignes.add(ps.AssigneeId);
}
system.debug('MemberswithPermissionSetToday'+MemberswithPermissionSetToday);
for(Id
U:MemberswithPermissionSetToday){
GroupMember
GM = new GroupMember();
GM.GroupId
= '00Zx0000002ABCD';
GM.UserOrGroupId = U;
GMList.add(GM);
}
list<GroupMember> totalGroupMembers= [SELECT
GroupId,Id,UserOrGroupId FROM GroupMember WHERE GroupId = '00Zx0000002ABCD' ];
for(GroupMember
gm:totalGroupMembers){
totalGroupMembersSet.add(gm.UserOrGroupId);
}
system.debug('totalGroupMembersSet'+totalGroupMembersSet);
totalGroupMembersSet.removeAll(totalPermissionSetAssignes);
system.debug('totalGroupMembersSet'+totalGroupMembersSet);
//To Remove
Members without PermissionSet
for(GroupMember temp:totalGroupMembers){
if(
totalGroupMembersSet.contains(temp.UserOrGroupId)){
GroupMember GM = new GroupMember();
GM.Id=
temp.Id;
GMDeletelist.add(GM);
}
}
try {
if(!GMList.isEmpty()) {
System.debug('Group Member List is ' + GMList);
upsert GMList;
}
if(!GMDeletelist.isEmpty()) {
System.debug('Group Member List is ' + GMDeletelist);
delete GMDeletelist;
}
}
catch
(Exception e) {
}
}
global void
finish(Database.BatchableContext bc){
}
}
Run the batch Class:
Id batchjobid= Database.executeBatch(new AssignPermissionSetBatch(), 10);
P.S: Comment Below for any Clarification or help!!
Happy working!! :) :)
Comments
Post a Comment