Побудувала перемикання контексту організації
Спроєктувала систему перемикання контексту організації з клієнтським localStorage та серверним дзеркалюванням cookie, що дала змогу користувачам діяти від імені керованих організацій, забезпечуючи авторизацію за принципом найменших привілеїв.
Роботу виконано: 2025

Фото: Eu_eugen / Pixabay 
Фото: Lukasgassner / Pixabay
дійте від імені будь‑якої своєї організації — безпечно
Ситуація. На платформі морський фахівець може керувати організаціями — компаніями, академіями, — які не мають власних облікових записів для входу. Обліковим записом є сама людина; організація — це те, від імені чого вона діє. Тож користувач має працювати в усьому застосунку від імені будь‑якої організації, якою керує, вільно перемикаючись між ними, і ця зручність не повинна обернутися діркою в авторизації.
Завдання. Перемикання контексту мало бути швидким і ненав’язливим для користувача, але так, щоб активний контекст сам собою ніколи не відкривав доступу, на який людина не має права.
Дія. За це відповідає OrganizationContext зі сховищем на обох боках. На клієнті джерелом істини щодо того, від імені якої організації користувач діє зараз, є localStorage, тож перемикання миттєве — без звернення до сервера. Серверний cookie дублює цей стан, щоб сторінки, які рендеряться на сервері, отримували той самий контекст під час SSR; на сервері його зчитує getServerViewMode. Головне ж те, що жодному з цих значень не довіряють, коли вирішують питання доступу. Авторизацію повторно перевіряють на сервері під час кожного запиту. Контекст на фронтенді існує заради зручності — щоб показати саме те, що треба, — а вирішувати, що користувачеві дозволено робити, може лише сервер.
Результат. Користувач без жодних перешкод діє від імені будь‑якої організації, якою керує, а інтерфейс лишається узгодженим і на клієнті, і на сервері. Але оскільки права щоразу перевіряються на сервері, ця зручність жодним чином не послаблює безпеку. Хто підмінить вміст localStorage, той змінить лише те, що показує йому власний інтерфейс, і нічого більше — сервер однаково відмовить.
Попередня робота: Спроєктувала наскрізний JSON від Postgres до API. Або перегляньте повне портфоліо.
Одна частина довшого переліку — і він увесь на цьому сайті.
Кожен запис написано однаково: ситуація, завдання, що ми зробили і що змінилося.

