package com.l7tech.server.security.rbac;

import com.l7tech.gateway.common.security.rbac.OperationType;
import com.l7tech.gateway.common.security.rbac.Role;
import com.l7tech.identity.User;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.OrganizationHeader;
import com.l7tech.server.EntityFinder;
import com.l7tech.util.Cacheable;
import com.l7tech.util.Pair;
import java.util.Collection;
import java.util.Set;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public interface RbacServices {
   boolean isPermittedForEntitiesOfTypes(User var1, OperationType var2, Set<EntityType> var3) throws FindException;

   boolean isPermittedForAnyEntityOfType(User var1, OperationType var2, EntityType var3) throws FindException;

   boolean isPermittedForSomeEntityOfType(User var1, OperationType var2, EntityType var3) throws FindException;

   boolean isPermittedForEntity(User var1, Entity var2, OperationType var3, @Nullable String var4) throws FindException;

   <T extends OrganizationHeader> Iterable<T> filterPermittedHeaders(User var1, OperationType var2, Iterable<T> var3, EntityFinder var4) throws FindException;

   @Cacheable(relevantArg = 0, maxAge = 5000)
   boolean isAdministrativeUser(@NotNull Pair<Goid, String> var1, @NotNull User var2) throws FindException;

   @Cacheable(relevantArg = 0, maxAge = 1000)
   Collection<Role> getAssignedRoles(@NotNull Pair<Goid, String> var1, @NotNull User var2) throws FindException;
}
