SystemRole
@mineflow/client-core / SystemRole
Type Alias: SystemRole
type SystemRole =
| "CEO"
| "Engineer"
| "Foreman"
| "Mechanic"
| "Admin"
| "OtibSpecialist"
| "Supply"
| "Surveyor"
| "Operator"
| "HrSpecialist"
| "ChiefMechanic";
Defined in: libs/auth/src/types.ts:25
Канонический RBAC-контракт MineFlow — 11 системных ролей в PascalCase.
Единый источник истины для ролей и на бэке (guard'ы @RequiresRole), и на
фронте: type-only re-export через @mineflow/api-schemas даёт фронту тип без
backend-зависимости, сохраняя compile-time связь (typecheck ловит дрейф ролей).
Применение в UI — через useCan из @mineflow/client-react.
CEO— генеральный директор (утверждение планов, double-approval).Engineer— инженер (утверждение рапортов, корректировки).Foreman— бригадир / начальник участка (сдача сменных рапортов, вахты, блоки; object-scoped).Mechanic— механик участка (обслуживание техники своего участка, object-scoped).Admin— администратор (учётные записи, роли).OtibSpecialist— специалист ОТиБ (охрана труда).Supply— снабжение (ГСМ, ТМЦ, поставщики).Surveyor— маркшейдер (приёмка/перебур буровзрывных блоков, cross-object; ADR-0094).Operator— буровик/машинист (подача сменного отчёта по своему станку, object-scoped; ADR-0102).HrSpecialist— кадровик (кадровые действия по домену HR, cross-object; ADR-0115). Управление учётными записями и назначение ролей (hr/user-accounts) НЕ входит — остаётся заAdmin.ChiefMechanic— главный механик и корпора тивные механики АУП / Службы ТО (те же действия, что уMechanic, но по всем участкам, cross-object; ADR-0117). Отдельная роль нужна потому, что у такого механика нет своего участка:personnel.objectId = NULL— корректные данные ростера, а не пробел, и под object-scoped ролью он не видел НИЧЕГО (fail-closed, ADR-0020).