UserService { public void revoke(ByteBuffer username, String environment) { lock.writeLock().lock(); try { Role role = getRole(username); if(role == Role.SERVICE) { throw new IllegalArgumentException( "Cannot revoke permissions for a service user"); } else if(role == Role.ADMIN) { throw new IllegalArgumentException( "Cannot revoke permissions for an ADMIN user. Please downgrade the user's role and try again"); } else { User user = getUserStrict(username); user.revoke(environment); } } finally { lock.writeLock().unlock(); } } @SuppressWarnings("unchecked") private  UserService(String backingStore, int accessTokenTtl,
            TimeUnit accessTokenTtlUnit); static UserService create(String backingStore); boolean authenticate(ByteBuffer username, ByteBuffer password); boolean can(ByteBuffer username, Permission permission,
            String environment); void create(ByteBuffer username, ByteBuffer password, Role role); void delete(ByteBuffer username); void disable(ByteBuffer username); void enable(ByteBuffer username); boolean exists(ByteBuffer username); void forEachUser(Consumer<ByteBuffer> consumer); Role getRole(ByteBuffer username); void grant(ByteBuffer username, Permission permission,
            String environment); boolean isEnabled(ByteBuffer username); void revoke(ByteBuffer username, String environment); void setPassword(ByteBuffer username, ByteBuffer password); void setRole(ByteBuffer username, Role role); final AccessTokenManager tokens; }
@Test(expected = IllegalArgumentException.class) public void testCannotRevokePermissionForServiceUser() { ByteBuffer username = service.tokens .identify(service.tokens.serviceIssue()); service.revoke(username, Random.getSimpleString()); }