chore(auth): rename schema workflow roles к colon-convention
Project uses Altum-style colon-separated realm roles: - ordinis:client:public / internal / restricted (scope ACL, уже active) Schema workflow roles (Phase 1d TODO) приводим к той же convention: - ordinis:schema:reviewer (был ordinis-schema-reviewer) - ordinis:schema:publisher - ordinis:schema:maker Изменения в usePermissions.ts: - JSDoc обновлён с новой convention - Constants ROLE_SCHEMA_* для discoverable rename'а в Phase 1d - TODO comments указывают на constants, не bare strings Phase 1d (когда подключится backend role check): 1. Uncomment role check в hooks 2. Backend SchemaDraftService.decide() — require role
This commit is contained in:
@@ -11,31 +11,46 @@ import { useAuth } from 'react-oidc-context'
|
|||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* <p>Phase 1d: подключим decode JWT → realm_access.roles, и эти hook'и
|
* <p>Phase 1d: подключим decode JWT → realm_access.roles, и эти hook'и
|
||||||
* начнут возвращать false для users без \`ordinis-schema-reviewer\` /
|
* начнут возвращать false для users без {@code ordinis:schema:reviewer}
|
||||||
* \`ordinis-schema-publisher\` ролей. UI hide'ит соответствующие кнопки.
|
* / {@code ordinis:schema:publisher} ролей. UI hide'ит соответствующие
|
||||||
|
* кнопки.
|
||||||
|
*
|
||||||
|
* <p><b>Naming convention:</b> roles используют colon-separated namespace
|
||||||
|
* pattern {@code ordinis:<domain>:<action>} (как Altum-style scope roles
|
||||||
|
* вида {@code ordinis:client:restricted}). Совпадает с realm role parser
|
||||||
|
* в {@code ScopeContext.java}. Dash-форма ({@code ordinis-schema-reviewer})
|
||||||
|
* НЕ используется в этом проекте — colon-стиль consistent с уже-existing
|
||||||
|
* scope ролями ({@code ordinis:client:public|internal|restricted}).
|
||||||
*
|
*
|
||||||
* <p>До тех пор все logged-in юзеры могут жать любые workflow buttons —
|
* <p>До тех пор все logged-in юзеры могут жать любые workflow buttons —
|
||||||
* backend гейт остаётся primary defence.
|
* backend гейт остаётся primary defence.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const ROLE_SCHEMA_REVIEWER = 'ordinis:schema:reviewer'
|
||||||
|
const ROLE_SCHEMA_PUBLISHER = 'ordinis:schema:publisher'
|
||||||
|
const ROLE_SCHEMA_MAKER = 'ordinis:schema:maker'
|
||||||
|
|
||||||
/** Может ли актор approve / request_changes / reject schema draft. */
|
/** Может ли актор approve / request_changes / reject schema draft. */
|
||||||
export function useCanReviewSchema(): boolean {
|
export function useCanReviewSchema(): boolean {
|
||||||
const auth = useAuth()
|
const auth = useAuth()
|
||||||
// TODO Phase 1d: const roles = (auth.user?.profile as { realm_access?: { roles?: string[] } })?.realm_access?.roles ?? []
|
// TODO Phase 1d: const roles = (auth.user?.profile as { realm_access?: { roles?: string[] } })?.realm_access?.roles ?? []
|
||||||
// return roles.includes('ordinis-schema-reviewer')
|
// return roles.includes(ROLE_SCHEMA_REVIEWER)
|
||||||
|
void ROLE_SCHEMA_REVIEWER
|
||||||
return auth.isAuthenticated
|
return auth.isAuthenticated
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Может ли актор publish approved schema draft (bump live version). */
|
/** Может ли актор publish approved schema draft (bump live version). */
|
||||||
export function useCanPublishSchema(): boolean {
|
export function useCanPublishSchema(): boolean {
|
||||||
const auth = useAuth()
|
const auth = useAuth()
|
||||||
// TODO Phase 1d: roles.includes('ordinis-schema-publisher')
|
// TODO Phase 1d: roles.includes(ROLE_SCHEMA_PUBLISHER)
|
||||||
|
void ROLE_SCHEMA_PUBLISHER
|
||||||
return auth.isAuthenticated
|
return auth.isAuthenticated
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Может ли актор create schema draft (maker side). */
|
/** Может ли актор create schema draft (maker side). */
|
||||||
export function useCanCreateSchemaDraft(): boolean {
|
export function useCanCreateSchemaDraft(): boolean {
|
||||||
const auth = useAuth()
|
const auth = useAuth()
|
||||||
// TODO Phase 1d: roles.includes('ordinis-schema-maker') OR any authenticated
|
// TODO Phase 1d: roles.includes(ROLE_SCHEMA_MAKER) OR any authenticated
|
||||||
|
void ROLE_SCHEMA_MAKER
|
||||||
return auth.isAuthenticated
|
return auth.isAuthenticated
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user