Как правило, я размещаю решения об авторизации в своих контроллерах на стороне сервера. В последнее время это были конечные точки RESTful, но я думаю, что то же самое относится и к архитектуре типов MVC. Ради аргумента предположим, что это авторизация на основе ролей. Защищенный метод будет аннотирован или проверен и при необходимости вернет 403.
Теперь, учитывая, что авторизация на самом деле является бизнес-правилом - например, «только администраторы могут перечислять X», я думаю, что они должны быть перемещены вниз на уровень. Когда контроллер просит бизнес-уровень выполнить операцию, сервисный или бизнес-уровень сообщает контроллеру, что он не авторизован.
Это разумный подход? Есть ли недостатки в этом?
Я не хочу иметь AuthorisationService, который по существу содержит кучу статических процедурно-кодированных правил для этого, но, возможно, имеет смысл хранить всю логику доступа в одном месте. Является ли это сквозной проблемой, которую следует хранить отдельно?
Поэтому я спрашиваю, сделал ли кто-нибудь это и как они добились этого чистым способом или есть ли какие-нибудь хорошие ресурсы, которые я мог бы прочитать. Я использую Java fwiw, но это не зависит от языка.
Я проверил соответствующие вопросы здесь, и они очень тонкие на земле и ответы. Например: проверка и авторизация в доменных моделях и перенос через сервисный уровень в MVC
Я читаю весенние документы по безопасности, которые приводят некоторые веские аргументы в пользу того, что это междисциплинарная проблема, но я боюсь, что это всего лишь «весенний путь» и хотел бы иметь более широкие перспективы. Это также связывает ваше приложение с конкретной структурой.