Як правило, я розміщую рішення про авторизацію в контролерах на стороні сервера. Останнім часом вони були RESTful кінцевими точками, але, я думаю, те саме стосується архітектур типу MVC. Заради аргументів припустимо, що це авторизація на основі ролей. Захищений метод буде анотовано або робити перевірки та повертати 403s, якщо це необхідно.
Тепер, зважаючи на те, що авторизація насправді є бізнес-правилом - наприклад, "лише адміністратори можуть перелічити X", я думаю, що їх слід відсунути на шар. Коли контролер просить бізнес-рівень провести операцію, сервіс або бізнес-рівень повідомляє контролер, що він не має права.
Це розумний підхід? Чи є недоліки в цьому?
Мені не подобається мати AuthorisationService, який по суті містить купу статичних процедурних правил, закодованих для цього, але, можливо, має сенс зберігати всю логіку доступу в одному місці. Це наскрізна проблема, яку слід тримати окремо?
Тож я запитую, чи хтось це зробив і як вони це досягли чистим способом, чи є якісь хороші ресурси, які я міг би прочитати. Я використовую Java fwiw, але це мовне агностичне питання.
Я перевірив відповідні питання тут, і вони дуже тонкі на місцях і відповіді. Наприклад: Валідація та авторизація в моделях доменів та перенесення їх через службовий рівень MVC
Я читаю весняні документи з безпеки, які висловлюють хороші аргументи за те, що вона є суперечливою проблемою, але я переживаю, що це лише "весняний шлях", і я хотів би розширити перспективи. Він також прив'язує вашу програму до конкретних рамок.