在Axon中,Command Interceptors似乎拦截了所有命令。对于权限检查,我需要根据命令的类型来决定是否要在当前上下文中使用该命令。
@Override
public BiFunction<Integer, CommandMessage<?>, CommandMessage<?>> handle(List<? extends CommandMessage<?>> messages) {
return (index, command) -> {
// Check permissions
return command;
};
}
通常,我更愿意为每种命令类型注册一个拦截器,并处理专用对象中的权限检查。我将如何使用Axon?我在单个拦截器中是否需要加载instanceof
if语句?有没有人有使用Axon进行权限检查的好例子?
答案 0 :(得分:1)
在这一点上(Axon 4.0),该框架不允许您选择直接为每个命令有效负载类型注册DispatchInterceptors
。因此,建议您执行的操作if-blocks / switch-statement是此时的最佳选择。
虽然我不确定您的权限检查的粒度如何,但是您可以做的是在命令上添加某种形式的权限注释,并在其上设置一个特定的值/枚举。这样,您不必直接将有效负载类型绑定到调度程序中,而只需检查注释是否存在,如果存在,则检查它的值以进行应该对其执行的权限检查。
与按有效载荷类型进行检查相比,这很有可能导致if-block / switch语句小得多。