由于这条线,似乎不可能在喷雾中嵌套授权指令:https://github.com/spray/spray/blob/76ab89c25ce6d4ff2c4b286efcc92ee02ced6eff/spray-routing/src/main/scala/spray/routing/directives/SecurityDirectives。斯卡拉#L55
我指的是做这样的事情:
val route = {
...
authorize(userIsAdmin) {
path("generic" / "admin" / "stuff") { ... } ~
path("users" / Segment) { u =>
authorize(canModifyUser) {
...
}
} ~
path("quotas") {
authorize(canModifyQuotas) {
...
}
}
}
}
当然,可以将其重构为将 userIsAdmin 包含到 canModifyUser 和 canModifyQuota 检查中,但使用正交访问权限,这可能会很快失控。
那条线的原因是什么?在我看来,为什么我们要取消任何进一步的授权失败,这似乎不合逻辑。
完全披露:如果其中一个嵌套检查失败,路由实际上会被拒绝,但它会给出 404 错误(EmptyRejection)而不是预期的 AuthorizationFailedRejection。