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

2025

**Ситуація.** На платформі морський фахівець може керувати організаціями — компаніями, академіями — які не мають власних облікових записів для входу. Обліковим записом є сама людина; організація — це те, від імені чого вона діє. Тож користувачу потрібно переміщуватися по всьому застосунку як будь‑яка з організацій, якими він керує, вільно перемикаючись між ними, і ця зручність не повинна перетворюватися на діру в авторизації.

**Завдання.** Перемикання контексту мало бути швидким і непомітним для користувача, і водночас потрібно було гарантувати, що активний контекст сам собою ніколи не надасть доступу, на який немає прав.

**Дія.** За це відповідає OrganizationContext зі зберіганням стану на обох сторонах. На клієнті джерелом істини щодо того, від імені якої організації користувач наразі діє, є localStorage, тож перемикання відбувається миттєво — без звернення до сервера. Серверний cookie дзеркалить цей стан, щоб сторінки, що рендеряться на сервері, визначали той самий контекст під час SSR; на сервері є getServerViewMode, який його зчитує. Важливо, що жодне з цього не використовується для ухвалення рішень щодо доступу. Авторизація повторно перевіряється на сервері під час кожного запиту. Контекст на фронтенді існує заради досвіду користування — показати саме те, що потрібно, — а сервер є єдиним джерелом істини щодо того, що дозволено робити.

**Результат.** Користувач може діяти від імені будь‑якої організації, якою керує, без жодних перешкод, а інтерфейс залишається синхронізованим і на клієнті, і на сервері. Але оскільки права щоразу перевіряються на сервері, ця зручність жодним чином не послаблює безпеку. Втручання у вміст localStorage змінює лише те, що бачить власний інтерфейс користувача, і нічого більше — сервер усе одно відмовить.

---

- Роль: Архітектор платформи
- Категорії: [Архітектура платформи](https://platform.engineer.company/uk/categories/platform-architecture/), [Backend‑розробка](https://platform.engineer.company/uk/categories/backend/), [Frontend‑розробка](https://platform.engineer.company/uk/categories/frontend/), [Full‑Stack розробка](https://platform.engineer.company/uk/categories/full-stack/), [API та інтеграції](https://platform.engineer.company/uk/categories/api/), [Безпека](https://platform.engineer.company/uk/categories/security/)
- Послуги: [Архітектура платформи та рішень](https://platform.engineer.company/uk/services/platform-architecture/), [Backend- та API‑розробка](https://platform.engineer.company/uk/services/backend-development/), [Frontend‑розробка](https://platform.engineer.company/uk/services/frontend-development/), [Безпека та керування доступом](https://platform.engineer.company/uk/services/security-access/)

<https://platform.engineer.company/uk/portfolio/designed-an-organization-context-switching-system-with-client-59/>
