springspring-securityspring-security-acl

How to remove AccessControlEntry (acl_entry) for certain Sid in Spring security acl?


how can i delete user access in spring security acl using mutableAclService . is this code is ok

private  void deleteEntry(Long id){

        ObjectIdentity objectIdentity = new ObjectIdentityImpl(OrganizationStructure.class, id);

        Sid user = new PrincipalSid("admin");
        Permission p1 = BasePermission.READ;

        try {
            MutableAcl acl = (MutableAcl) mutableAclService.readAclById(objectIdentity);
            acl.getEntries().forEach(c->{
                System.out.println(c.toString());
                if(c.getSid().equals(user))
                    acl.getEntries().remove(c);
            });
            mutableAclService.updateAcl(acl);

        } catch (NotFoundException nfe) {
        }

    }

Solution

  • After try i find how can i remove entry

    private void deleteEntry(Long id) {
            ObjectIdentity objectIdentity = new ObjectIdentityImpl(OrganizationStructure.class, id);
            Sid user = new PrincipalSid(SecurityUtility.getAuthenticatedUser().getUsername());
            try {
                MutableAcl acl = (MutableAcl) mutableAclService.readAclById(objectIdentity);
                Consumer<AccessControlEntry> style = (AccessControlEntry p) -> System.out.println("id:"+p.getSid());
                acl.getEntries().forEach(style);
    
                for (int i = 0; i < acl.getEntries().size(); i++) {
                    if (acl.getEntries().get(i).getSid().toString().equals(user.toString())) {
                        acl.deleteAce(i);
                        break;
                    }
                }
    
                acl.getEntries().forEach(style);
                mutableAclService.updateAcl(acl);
            } catch (NotFoundException nfe) {
            }
    
        }