Вот шаги, которые я бы предложил.
- написать аннотацию -
public @interface Permission
заставляет пользователя аннотировать каждое из перечисленных им разрешений этой аннотацией:
@Permission
public enum ConcretePermissionEnum {..}
Сделайте ваш authorize
метод похожим на:
public boolean authorize(User user, Enum... permissions) {
for (Enum permission : permissions) {
if (permission.getClass().isAnnotationPresent(Permission.class)){
// handle the permission
}
}
}
Если вы хотите, чтобы в перечислениях Permission были какие-то определенные методы, или просто нужен маркер, то вы можете сделать так, чтобы перечисления пользователей реализовывали ваш интерфейс (вместо того, чтобы аннотироваться):
interface PermissionInterface {..}
enum ConcretePermission implements PermissionInterface
Это позволит включить проверку во время компиляции, а не проверку во время выполнения, как в случае подхода с аннотациями, при этом сигнатура метода authorize
выглядит следующим образом:
public boolean authorize(User user, PermissionInterface... permissions)