RABC fejlesztése és beélesítése hibák kijavításával
This commit is contained in:
@@ -69,6 +69,10 @@ export interface UserProfile {
|
||||
person_id: number | null
|
||||
// Nested person data with address
|
||||
person: PersonData | null
|
||||
// RBAC Phase 3: Rendszerszintű képességek (a SYSTEM_CAPABILITIES_MATRIX-ból)
|
||||
system_capabilities?: Record<string, boolean>
|
||||
// RBAC Phase 3: Szervezeti szintű képességek (org_id -> capability -> bool)
|
||||
org_capabilities?: Record<string, Record<string, boolean>>
|
||||
}
|
||||
|
||||
export const useAuthStore = defineStore('auth', () => {
|
||||
@@ -87,6 +91,19 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
return !!user.value?.person_id
|
||||
})
|
||||
const userRole = computed(() => user.value?.role ?? 'guest')
|
||||
|
||||
/**
|
||||
* Ellenőrzi, hogy a felhasználó rendelkezik-e admin jogosultsággal.
|
||||
* A SUPERADMIN és ADMIN (és egyéb adminisztratív) szerepköröket ismeri fel.
|
||||
*/
|
||||
const isAdmin = computed(() => {
|
||||
const role = user.value?.role
|
||||
if (!role) return false
|
||||
// CRITICAL: Backend sends UPPERCASE roles (SUPERADMIN, ADMIN, MODERATOR)
|
||||
// Must use toUpperCase() to ensure case-insensitive matching
|
||||
const adminRoles = ['SUPERADMIN', 'ADMIN', 'MODERATOR']
|
||||
return adminRoles.includes(role.toUpperCase())
|
||||
})
|
||||
const userName = computed(() => {
|
||||
if (!user.value) return ''
|
||||
const { first_name, last_name } = user.value
|
||||
@@ -95,6 +112,41 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
})
|
||||
const userId = computed(() => user.value?.id ?? null)
|
||||
|
||||
// ── RBAC Phase 3: Capability Helpers ───────────────────────────────
|
||||
|
||||
/**
|
||||
* Ellenőrzi, hogy a felhasználó rendelkezik-e egy adott rendszerszintű képességgel.
|
||||
* A képességek a backend /auth/me vagy /users/me végpontról érkeznek
|
||||
* a SYSTEM_CAPABILITIES_MATRIX alapján.
|
||||
* @param capability - A képesség neve (pl. 'can_manage_users')
|
||||
* @returns true, ha a képesség elérhető a user szerepköréhez
|
||||
*/
|
||||
function hasSystemCapability(capability: string): boolean {
|
||||
return user.value?.system_capabilities?.[capability] === true
|
||||
}
|
||||
|
||||
/**
|
||||
* Ellenőrzi, hogy a felhasználó rendelkezik-e egy adott szervezeti képességgel.
|
||||
* A szervezeti képességek az OrgRole.permissions JSONB mezőből származnak.
|
||||
* @param orgId - A szervezet azonosítója (string vagy number)
|
||||
* @param capability - A képesség neve (pl. 'can_approve_expense')
|
||||
* @returns true, ha a képesség elérhető a user számára az adott szervezetben
|
||||
*/
|
||||
function hasOrgCapability(orgId: string | number, capability: string): boolean {
|
||||
const orgCaps = user.value?.org_capabilities?.[String(orgId)]
|
||||
if (!orgCaps) return false
|
||||
return orgCaps[capability] === true
|
||||
}
|
||||
|
||||
/**
|
||||
* Visszaadja az összes szervezeti képességet egy adott szervezethez.
|
||||
* @param orgId - A szervezet azonosítója
|
||||
* @returns A képességek objektuma, vagy üres objektum, ha nincs
|
||||
*/
|
||||
function getOrgCapabilities(orgId: string | number): Record<string, boolean> {
|
||||
return user.value?.org_capabilities?.[String(orgId)] || {}
|
||||
}
|
||||
|
||||
// ────────────────────────────── Helpers ────────────────────────────
|
||||
|
||||
/**
|
||||
@@ -671,6 +723,7 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
|
||||
// Getters
|
||||
isAuthenticated,
|
||||
isAdmin,
|
||||
isKycComplete,
|
||||
userRole,
|
||||
userName,
|
||||
@@ -679,6 +732,11 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
hasBusinessOrganization,
|
||||
isCorporateMode,
|
||||
|
||||
// RBAC Phase 3: Capability Helpers
|
||||
hasSystemCapability,
|
||||
hasOrgCapability,
|
||||
getOrgCapabilities,
|
||||
|
||||
// Actions
|
||||
login,
|
||||
fetchUser,
|
||||
|
||||
Reference in New Issue
Block a user