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

Popular posts from this blog

Embed Special Characters in VF Page

Error: Compile Error: Illegal conversion from String to System.PageReference

Some Common Errors in the Visual flow