# Побудувала перемикання контексту організації

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

2025

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

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

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

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

---

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

<https://engineer.company/uk/portfolio/built-organization-context-switching-for-users/>
