// Copyright © 2015 HSL <https://www.hsl.fi> // This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses. package fi.hsl.parkandride.core.domain; import static fi.hsl.parkandride.core.domain.Permission.ALL_OPERATORS; import static fi.hsl.parkandride.core.domain.Permission.FACILITY_UTILIZATION_UPDATE; import static fi.hsl.parkandride.core.domain.Permission.HUB_CREATE; import static fi.hsl.parkandride.core.domain.Permission.HUB_UPDATE; import static fi.hsl.parkandride.core.domain.Permission.OPERATOR_CREATE; import static java.util.Arrays.asList; import java.util.HashSet; import java.util.Set; import com.google.common.collect.ImmutableSet; public enum Role { ADMIN(false, exclude(FACILITY_UTILIZATION_UPDATE)), OPERATOR(false, exclude(ALL_OPERATORS, FACILITY_UTILIZATION_UPDATE, OPERATOR_CREATE, HUB_CREATE, HUB_UPDATE)), OPERATOR_API(true, include(FACILITY_UTILIZATION_UPDATE)); public final boolean perpetualToken; public final Set<Permission> permissions; Role(boolean perpetualToken, ImmutableSet<Permission> permissions) { this.perpetualToken = perpetualToken; this.permissions = permissions; } private static ImmutableSet<Permission> exclude(Permission... excludedPermissions) { Set<Permission> permissions = new HashSet<>(asList(Permission.values())); for (Permission excluded : excludedPermissions) { permissions.remove(excluded); } return ImmutableSet.copyOf(permissions); } private static ImmutableSet<Permission> include(Permission... includedPermissions) { return ImmutableSet.copyOf(includedPermissions); } public boolean hasPermission(Permission permission) { return permissions.contains(permission); } }