Могут ли команды быть перехвачены в зависимости от их типа?
В Axon, командные перехватчики, кажется, перехватывают любую команду. Для проверки разрешений мне нужно основывать свое решение на типе команды, чтобы увидеть, разрешено ли это в текущем контексте.
@Override
public BiFunction<Integer, CommandMessage<?>, CommandMessage<?>> handle(List<? extends CommandMessage<?>> messages) {
return (index, command) -> {
// Check permissions
return command;
};
}
Обычно я предпочитаю регистрировать перехватчик для каждого типа команды и обрабатывать проверки разрешений в выделенных объектах. Как бы я сделал это с Аксоном? Нужно ли мне иметь груз instanceof
операторы if в одном перехватчике? У кого-нибудь есть хороший пример проверки разрешений с Аксоном?
1 ответ
На данный момент (Axon 4.0) фреймворк не позволяет вам зарегистрироваться DispatchInterceptors
по типу полезной нагрузки команды напрямую. Так что то, что вы предлагаете сделать, операторы if-blocks/switch- это лучшее, что вы можете сделать на данный момент.
Несмотря на то, что я не уверен, насколько точны ваши проверки разрешений, вы могли бы иметь некоторую форму аннотации разрешений для команд с определенным значением / перечислением, которое вам необходимо установить. Таким образом, вам не нужно напрямую привязывать свой тип полезной нагрузки к диспетчеру, а можно просто проверить, существует ли аннотация, и если да, то проверить ее значение для вида проверки разрешений, которая должна быть выполнена для него.
Скорее всего, это приведет к гораздо меньшему значению оператора if-block/switch, чем проверка для каждого типа полезной нагрузки.