Вложение директив авторизации в спрей

Кажется, невозможно вложить авторизованные директивы в спрей из-за этой строки: /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.


person Ákos Vandra    schedule 27.05.2016    source источник
comment
Возможно, это поможет: groups.google.com/forum/#!topic/ спрей-пользователь/sB4R7164OZ0. Какую реальную проблему вы наблюдаете? Возможно, это тоже связано (расположение директив авторизации): stackoverflow.com/questions/27713177/   -  person devkat    schedule 27.05.2016
comment
Спасибо, @AndreasJim-Hartmann, первая ссылка объясняет, почему существует отмена отказа (директивы авторизации одного из братьев), к сожалению, там нет решения проблемы ...   -  person Ákos Vandra    schedule 28.05.2016