RBAC-гейт в UI
Как показывать и прятать элементы UI по ролям пользователя — кнопки, пункты меню, целые экраны. Рецепт строится на хуке useCan (и чистой функции can) из @mineflow/client-react, 7 канонических ролях SystemRole и маппинге Keycloak-ролей через mapKeycloakRoles.
UI-гейт — не безопасность
useCan/can управляют только видимостью в интерфейсе. Это удобство (не показывать кнопку, которую всё равно нельзя нажать), а не контроль доступа. Сервер заново проверяет роли и object-scope по JWT и вернёт 403, если запрос недопустим. Никогда не полагайтесь на UI-гейт как на единственную защиту: пользователь может выполнить запрос мимо вашего UI.
7 канонических ролей
Источник истины — бэкенд (SystemRole), на фронт тип приходит без дрейфа. Канонические роли всегда в PascalCase:
import type { SystemRole } from '@mineflow/client-core';
// 'CEO' | 'Engineer' | 'Foreman' | 'Mechanic' | 'Admin' | 'OtibSpecialist' | 'Supply'
| Роль | Назначение |
|---|---|
CEO | Руководство |
Engineer | Инженер БВР |
Foreman |