package nl.ipo.cds.domain; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * Describes the type of authorization when authorizing a {@link DbGebruiker} with a {@link BronhouderThema}. */ public enum TypeGebruik { /** * The user can access data in datasets belonging to a theme through the services. */ RAADPLEGER, /** * The user can manage the data in datasets belonging to a theme. */ DATABEHEERDER (TypeGebruik.RAADPLEGER), /** * The user can publish a dataset. */ VASTSTELLER (TypeGebruik.RAADPLEGER); private final Set<TypeGebruik> permissions; TypeGebruik () { this (new TypeGebruik[0]); } TypeGebruik (final TypeGebruik ... otherPermissions) { final Set<TypeGebruik> permissions = new HashSet<> (); permissions.add (this); for (final TypeGebruik other: otherPermissions) { permissions.add (other); } this.permissions = Collections.unmodifiableSet (permissions); } /** * Returns true if the given typeGebruik is either equal to or implied by this type gebruik. * * @param typeGebruik The type gebruik to test. * @return True if "this" equals typeGebruik, or if typeGebruik is implied by this. */ public boolean isAllowed (final TypeGebruik typeGebruik) { return permissions.contains (typeGebruik); } public Set<TypeGebruik> getPermissions () { return Collections.unmodifiableSet (permissions); } }