Как-то раз я купил(а) билет на самолёт буквально впритык к дате вылета.
Платёж прошёл успешно. Деньги были списаны с аккаунта.
Но вместо того, чтобы показать «Бронирование успешно», на экране отображалась только короткая строка:
«Я обрабатываю.»
Тогда первая моя реакция была подумать, что система задерживает.
Все, что мне нужно было сделать, я уже сделал.
Так чего же тогда ещё ждать?
Позже я понял, возможно, система на самом деле не тормозит.
Она просто ещё не хочет, чтобы эта транзакция завершилась прямо сейчас.
Звучит странно.
Потому что мы обычно думаем, что решение имеет только две возможности: разрешить или не разрешить.
Но на практике есть и другой выбор.
Разрешено, но не сейчас.
Это заставляет меня довольно много думать, когда я читаю про @NewtonProtocol.
Меня интересует не то, отвечает ли policy «allow» или «deny».
Но есть ещё меньший вопрос:
Должен ли корректный execution обязательно происходить сразу, как только его запросили?
Думаю, не совсем так.
Есть такие execution, где ценность решения не сводится лишь к тому, разрешить или запретить.
Это ещё и связано с тем моментом, когда система решает, что это действительно должно произойти.
В этот момент «ожидание» больше не признак медленной системы.
Это может быть частью самого решения.
Вот тут я вижу довольно существенное отличие.
Обычно мы воспринимаем время просто как интервал от момента нажатия кнопки до момента завершения.
Но бывают и случаи, когда время становится параметром authorization.
Не потому, что execution неверный.
То, что execution корректный, не означает, что он должен произойти прямо сейчас.
Возражение.
Если политика всегда выбирает отложить ради безопасности, опыт быстро станет неприятным. Пользователи начнут чувствовать, что все действия выполняются медленно — даже когда для этого нет явной причины.
Но если политика по умолчанию предполагает, что каждый корректный execution должен выполняться немедленно, система сама теряет очень важный способ обработки между двумя вариантами — «разрешить» и «отказать».
То, что я хочу увидеть из @NewtonProtocol — это не только возможность принимать решение.
Речь о том, как policy определяет, когда execution следует запускать сразу, а когда само ожидание дополнительного промежутка времени является более разумным решением.
Для меня хороший слой authorization решает не только то, что можно.
Она также понимает, что иногда правильное время — это часть того же решения.
