All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.revenj.security.PermissionManager Maven / Gradle / Ivy

The newest version!
package org.revenj.security;

import org.revenj.patterns.Query;
import org.revenj.patterns.Specification;
import org.revenj.patterns.DataSource;

import java.io.Closeable;
import java.security.Principal;
import java.util.List;
import java.util.Objects;

public interface PermissionManager {
	boolean canAccess(String identifier, Principal user);

	default boolean canAccess(Class manifest, Principal user) {
		return canAccess(manifest.getTypeName(), user);
	}

	 Query applyFilters(Class manifest, Principal user, Query data);

	default  Query applyFilters(Class manifest, Query data) {
		return applyFilters(manifest, boundPrincipal.get(), data);
	}

	 List applyFilters(Class manifest, Principal user, List data);

	default  List applyFilters(Class manifest, List data) {
		return applyFilters(manifest, boundPrincipal.get(), data);
	}

	 Closeable registerFilter(Class manifest, Specification filter, String role, boolean inverse);

	default  Closeable registerForRole(Class manifest, Specification filter, String role) {
		return registerFilter(manifest, filter, role, false);
	}

	default  Closeable registerWhenNotInRole(Class manifest, Specification filter, String role) {
		return registerFilter(manifest, filter, role, true);
	}

	ThreadLocal boundPrincipal = new ThreadLocal<>();

	static boolean implies(String role) {
		Principal principal = boundPrincipal.get();
		if (principal instanceof UserPrincipal) {
			return ((UserPrincipal) principal).implies(role);
		}
		return principal != null && Objects.equals(role, principal.getName());
	}
}