Можно ли перехватывать команды на основе их типа?

В Axon Перехватчики команд перехватывают любую команду. Для проверки разрешений мне нужно основывать свое решение на типе команды, чтобы увидеть, разрешена ли она в текущем контексте.

@Override
public BiFunction<Integer, CommandMessage<?>, CommandMessage<?>> handle(List<? extends CommandMessage<?>> messages) {
    return (index, command) -> {
        // Check permissions
        return command;
    };
}

Обычно я бы предпочел зарегистрировать перехватчик для каждого типа команды и обрабатывать проверки разрешений в выделенных объектах. Как бы я сделал это с Axon? Нужно ли мне иметь загрузку instanceof операторов if в одном перехватчике? У кого-нибудь есть хороший пример проверки разрешений с помощью Axon?


person Double M    schedule 05.11.2018    source источник


Ответы (1)


На данный момент (Axon 4.0) платформа не позволяет вам напрямую регистрировать DispatchInterceptors для каждого типа полезной нагрузки команды. Итак, то, что вы предлагаете сделать, if-blocks/switch-statements, - это лучшее, что вы можете сделать на данный момент.

Хотя я не уверен, насколько точны ваши проверки разрешений, вы могли бы иметь некоторую форму аннотации разрешений для команд с определенным значением/перечислением, которое вам нужно установить для него. Таким образом, вам не нужно напрямую привязывать тип полезной нагрузки к диспетчеру, а можно просто проверить, существует ли аннотация, и если да, проверить ее значение для типа проверки разрешений, которая должна выполняться для нее.

Это, скорее всего, приведет к гораздо меньшему количеству if-block/switch-statement, чем проверка для каждого типа полезной нагрузки.

person Steven    schedule 06.11.2018