可以根据命令的类型截获命令吗?

时间:2018-11-05 18:50:32

标签: permissions authorization interceptor axon

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进行权限检查的好例子?

1 个答案:

答案 0 :(得分:1)

在这一点上(Axon 4.0),该框架不允许您选择直接为每个命令有效负载类型注册DispatchInterceptors。因此,建议您执行的操作if-blocks / switch-statement是此时的最佳选择。

虽然我不确定您的权限检查的粒度如何,但是您可以做的是在命令上添加某种形式的权限注释,并在其上设置一个特定的值/枚举。这样,您不必直接将有效负载类型绑定到调度程序中,而只需检查注释是否存在,如果存在,则检查它的值以进行应该对其执行的权限检查。

与按有效载荷类型进行检查相比,这很有可能导致if-block / switch语句小得多。