RBAC ба super admin¶
Эрх олголт хоёр давхаргад хэрэгждэг: HTTP ирмэг дээр JWT role/permission, өгөгдлийн сан дээр RLS. Аль нэг нь алдвал нөгөө нь барина.
Role загвар¶
Дөрвөн зэрэглэлтэй role — 1 нь хамгийн дээд:
RoleSuperAdmin = 1 // админ хэрэглэгчдийг удирдана
RoleAdmin = 2 // бүх эрх
RoleManager = 3
RoleUser = 4 // шинэ eID хэрэглэгчийн default
IsAdmin()нь admin ба super admin хоёуландtrue— super admin нь admin-ийн JWT / RLS / permission замыг өвлөнө.IsSuperAdmin()зөвхөн super admin-дtrue;/superadminгадаргууг хаана.- Role ID
0нь claim-гүй хуучин токенуудын sentinel — RBAC middleware түүнийгRoleUserруу буулгана.
Динамик эрх¶
Бүдүүн зэрэглэлээс гадна rbac usecase нь role-ийн эрхийн багцыг DB-ээс
шийднэ (roles · permissions · role_permissions).
| Эрх | Ангилал | Юуг нээдэг |
|---|---|---|
dashboard.view |
general | Хяналтын самбар |
settings.manage |
general | Тохиргоо, theme, AI prompt |
users.manage |
administration | Хэрэглэгч удирдах |
roles.manage |
administration | Role + эрх удирдах |
gateway.manage |
administration | API gateway, OAuth client бүртгэл |
registry.view |
administration | Үйлчилгээний регистр үзэх |
registry.manage |
administration | Регистр засварлах, нийтлэх |
relay.view |
administration | SLA хяналтын самбар |
relay.manage |
administration | Дамжуулах чиглүүлэлт удирдах |
gov.catalog |
administration | Үйлчилгээний каталог удирдах |
gov.review |
management | Иргэний хүсэлт хянах (албан хаагч) |
manager.view |
management | Менежерийн хэсэг |
personal.view |
personal | Хувийн хэсэг (/me/*) |
Системийн role-уудын үндсэн олголт:
| Role | Эрхүүд |
|---|---|
admin |
Бүх каталог — тусгай мөр бичдэггүй, автоматаар шийдэгдэнэ |
manager |
dashboard.view · manager.view · users.manage |
user |
dashboard.view · personal.view |
Route дээр хэрэглэх¶
r.With(mw.RequirePermission(resolver, "registry.manage")).
Post("/services", h.CreateService)
r.With(mw.RequireAdmin()).Get("/audit", h.ListAudit)
r.With(mw.RequireSuperAdmin()).Route("/superadmin", …)
RequirePermissionнь admin-ыг давуулна — admin бүх permission-той.- Resolver нь DB-ээс уншихдаа алдвал fail-closed (татгалзана).
- Frontend талд
lib/navigation.tsижил эрхийн зураглалаар цэсийг барина;navigation.test.tsтүүнийг батална.
Role удирдах API¶
| Endpoint | Эрх | Юу |
|---|---|---|
GET /v1/rbac/me |
нэвтэрсэн | Миний role + эрхүүд |
GET /v1/rbac/roles |
roles.manage |
Role жагсаалт |
GET /v1/rbac/permissions |
roles.manage |
Эрхийн каталог |
POST /v1/rbac/roles |
roles.manage |
Шинэ role |
PUT /v1/rbac/roles/{id} |
roles.manage |
Нэр / тайлбар засах |
PUT /v1/rbac/roles/{id}/permissions |
roles.manage |
Эрхийн багц тавих |
DELETE /v1/rbac/roles/{id} |
roles.manage |
Role устгах |
Системийн role-ууд (is_system = true) устгагдахгүй. Мутаци бүр audit log-д
бичигдэнэ.
Хэрэглэгч удирдах¶
| Endpoint | Эрх |
|---|---|
GET/POST /v1/admin/users |
users.manage |
PUT /v1/admin/users/{id}/role |
users.manage |
PUT /v1/admin/users/{id}/active |
users.manage |
DELETE /v1/admin/users/{id} |
users.manage (soft delete) |
Super admin¶
Super admin бол админ хэрэглэгчдийг удирдах цорын ганц үүрэг. Түүний данс
superadmin_accounts хүснэгтэд тусад нь амьдарна — тиймээс нэг хүн eID-ээр
админ, өөр аргаар super admin байж чадна.
| Endpoint | Юу |
|---|---|
GET/POST /v1/superadmin/admins |
Админ хэрэглэгч жагсаах / үүсгэх |
GET/POST /v1/superadmin/admins/by-register |
Регистрийн дугаараар |
PUT /v1/superadmin/admins/{id}/grant |
Эрх олгох |
DELETE /v1/superadmin/admins/{id} |
Эрх хураах |
GET/POST /v1/superadmin/invites |
Урилгын allow-list |
DELETE /v1/superadmin/invites/{email} |
Урилга цуцлах |
GET/PUT /v1/superadmin/access-mode |
Платформын хандалтын горим |
Хамгаалалт:
- Бүх мутаци audit log-д бичигдэнэ.
- Нэвтрэхэд MFA (TOTP) заавал; сэргээх кодууд hash хэлбэрээр.
- Эхний super admin зөвхөн
SUPERADMIN_EMAIL/ DB-ээс bootstrap хийгдэнэ — API-аар үүсгэх боломжгүй. - Onboarding урсгалыг eID нэвтрэлт-ээс үз.
Эрх нэмэх
Шинэ эрх нэмэхдээ migration-аар permissions-д мөр оруулж, backend дээр
RequirePermission-оор route-ыг хаа, frontend дээр lib/navigation.ts-д
цэсийн нөхцөлийг нэм. Гурвуулаа хийгдээгүй бол UI харагдаад API 403 өгнө.