Агуулгыг алгасах

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 өгнө.