Кажется, невозможно вложить авторизованные директивы в спрей из-за этой строки: /directives/SecurityDirectives.scala#L55" rel="nofollow">https://github.com/spray/spray/blob/76ab89c25ce6d4ff2c4b286efcc92ee02ced6eff/spray-routing/src/main/scala/spray/routing/directives/SecurityDirectives.scala #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.