42 lines
1.9 KiB
TypeScript
42 lines
1.9 KiB
TypeScript
import { useAuth } from 'react-oidc-context'
|
|
|
|
/**
|
|
* Permission helpers для schema workflow. Phase 1c — stub: проверяем
|
|
* только что пользователь authenticated (любой logged-in юзер может
|
|
* approve/publish). Backend всё равно отрежет:
|
|
* <ul>
|
|
* <li>{@code 403 self_approve_forbidden} — если maker == reviewer.</li>
|
|
* <li>{@code 403 forbidden_role} — когда Keycloak roles прорастут и
|
|
* backend начнёт проверять realm-роли (placeholder).</li>
|
|
* </ul>
|
|
*
|
|
* <p>Phase 1d: подключим decode JWT → realm_access.roles, и эти hook'и
|
|
* начнут возвращать false для users без \`ordinis-schema-reviewer\` /
|
|
* \`ordinis-schema-publisher\` ролей. UI hide'ит соответствующие кнопки.
|
|
*
|
|
* <p>До тех пор все logged-in юзеры могут жать любые workflow buttons —
|
|
* backend гейт остаётся primary defence.
|
|
*/
|
|
|
|
/** Может ли актор approve / request_changes / reject schema draft. */
|
|
export function useCanReviewSchema(): boolean {
|
|
const auth = useAuth()
|
|
// TODO Phase 1d: const roles = (auth.user?.profile as { realm_access?: { roles?: string[] } })?.realm_access?.roles ?? []
|
|
// return roles.includes('ordinis-schema-reviewer')
|
|
return auth.isAuthenticated
|
|
}
|
|
|
|
/** Может ли актор publish approved schema draft (bump live version). */
|
|
export function useCanPublishSchema(): boolean {
|
|
const auth = useAuth()
|
|
// TODO Phase 1d: roles.includes('ordinis-schema-publisher')
|
|
return auth.isAuthenticated
|
|
}
|
|
|
|
/** Может ли актор create schema draft (maker side). */
|
|
export function useCanCreateSchemaDraft(): boolean {
|
|
const auth = useAuth()
|
|
// TODO Phase 1d: roles.includes('ordinis-schema-maker') OR any authenticated
|
|
return auth.isAuthenticated
|
|
}
|