# 🔐 Jogosultságkezelés Audit Jelentés (2026-06-18) ## Teljes Rendszerkép a Jogosultsági Szintekről --- ## 1. Adatbázis Réteg (Database Schema) ### 1.1 `identity.users` - Felhasználói Jogosultságok | Mező | Típus | Leírás | |------|-------|--------| | `role` | `identity.userrole` enum | Rendszerszintű szerepkör | | `scope_level` | `VARCHAR(30)` | Hatókör szint (pl. "individual") | | `scope_id` | `VARCHAR(50)` | Hatókör azonosító (pl. org ID vagy user ID) | | `custom_permissions` | `JSON` | Egyedi jogosultságok (`{"capabilities": [...]}`) | **`userrole` enum értékei** (Python `UserRole` osztály, `backend/app/models/identity/identity.py:24`): ``` superadmin, admin, region_admin, country_admin, moderator, sales_agent, user, service_owner, fleet_manager, driver ``` > ⚠️ **Probléma**: Az adatbázis enum duplikált értékeket tartalmaz (pl. "admin" és "ADMIN" is létezik, "user" kétszer szerepel). Ez az enum korábbi migrációk során keletkezett. ### 1.2 `fleet.org_roles` - Szervezeti Szerepkör Definíciók **🔴 KRITIKUS: A tábla ÜRES!** A modell (`backend/app/models/marketplace/organization.py:34`) definiál egy dinamikus szerepkör rendszert (`OrgRole` modell), de **seed-elés nem történt meg**. A `OrgUserRole` enum (`backend/app/models/marketplace/organization.py:27`) az alábbi értékeket tartja számon: ``` OWNER, ADMIN, MANAGER, MEMBER, AGENT ``` ### 1.3 `fleet.organization_members` - Tagságok és Jogosultságok | Mező | Típus | Leírás | |------|-------|--------| | `role` | `VARCHAR(50)` | Szerepkör a szervezetben (OWNER/ADMIN/MANAGER/MEMBER/AGENT) | | `permissions` | `JSON` | Egyedi JSON jogosultságok | | `is_permanent` | `BOOLEAN` | Állandó tagság | | `is_verified` | `BOOLEAN` | Megerősített tagság | | `status` | `VARCHAR(20)` | Státusz (active/inactive) | ### 1.4 `system.system_parameters` - Hierarchikus Paraméterezés | Mező | Típus | Leírás | |------|-------|--------| | `key` | `VARCHAR` | Paraméter kulcs | | `value` | `JSONB` | Paraméter érték | | `scope_level` | `parameter_scope` enum | Hatókör: GLOBAL, COUNTRY, REGION, USER, ORGANIZATION | | `scope_id` | `VARCHAR` | Hatókör azonosító | **`parameter_scope` enum értékei** (`backend/app/models/system/system.py:12`): ``` GLOBAL, COUNTRY, REGION, ORGANIZATION, USER ``` > ⚠️ **Probléma**: Minden meglévő paraméter `global` scope_level-lel rendelkezik. A hierarchikus scope (country, region, organization, user) **nincs használatban** gyakorlatban. ### 1.5 `system.pending_actions` - Dual Control (Négy Szem Elv) | Mező | Típus | Leírás | |------|-------|--------| | `requester_id` | `INTEGER` | Kérelem indítója | | `approver_id` | `INTEGER` | Jóváhagyó (nullable) | | `status` | `action_status` enum | pending/approved/rejected | | `action_type` | `VARCHAR` | CHANGE_ROLE, SET_VIP, WALLET_ADJUST, SOFT_DELETE_USER, ORGANIZATION_TRANSFER | | `payload` | `JSONB` | Művelet adatok | ### 1.6 `system.subscription_tiers` - Előfizetési Csomagok | Mező | Típus | Leírás | |------|-------|--------| | `name` | `VARCHAR` | Csomag neve (FREE, PREMIUM, VIP, stb.) | | `rules` | `JSONB` | Szabályok (pl. `{"max_vehicles": 5}`) | --- ## 2. Backend Kód Réteg ### 2.1 Rang Rendszer - `DEFAULT_RANK_MAP` Definiálva: `backend/app/core/security.py:56` | Rang | Érték | Van UserRole enum-ban? | |------|-------|----------------------| | SUPERADMIN | 100 | ✅ Igen | | ADMIN | 90 | ✅ Igen | | REGION_ADMIN | 85 | ✅ Igen | | COUNTRY_ADMIN | 80 | ✅ Igen | | MODERATOR | 75 | ✅ Igen | | AUDITOR | 70 | ❌ Nincs | | ORGANIZATION_OWNER | 65 | ❌ Nincs | | ORGANIZATION_MANAGER | 60 | ❌ Nincs | | ORGANIZATION_MEMBER | 50 | ❌ Nincs | | SERVICE_PROVIDER | 40 | ❌ Nincs | | SALES_AGENT | 30 | ✅ Igen | | FLEET_MANAGER | 25 | ✅ Igen | | PREMIUM_USER | 20 | ❌ Nincs | | USER | 10 | ✅ Igen | | DRIVER | 5 | ✅ Igen | | GUEST | 0 | ❌ Nincs | > 🔴 **KRITIKUS**: 16 rang van definiálva, de a `UserRole` enum csak 10 értéket tartalmaz. A hiányzók (AUDITOR, ORGANIZATION_OWNER/MANAGER/MEMBER, SERVICE_PROVIDER, PREMIUM_USER, GUEST) sosem kerülnek kiosztásra! ### 2.2 RBAC Osztály - 3 Szintű Ellenőrzés Forrás: `backend/app/core/rbac.py` ``` 1. Superadmin check → mindent átenged 2. Rang ellenőrzés → DEFAULT_RANK_MAP alapján 3. Custom permissions → capabilities lista ellenőrzése ``` ### 2.3 API Deps - `get_current_admin` Forrás: `backend/app/api/deps.py:158` Engedélyezett admin szerepkörök: ```python allowed_roles = {superadmin, admin, region_admin, country_admin, moderator} ``` ### 2.4 Scoped RBAC - `check_resource_access` Forrás: `backend/app/api/deps.py:106` ``` - Superadmin → mindenhez hozzáfér - Saját ID vagy scope_id egyezés → hozzáfér - Egyéb → 403 Forbidden ``` ### 2.5 Dual Control - `SecurityService` Forrás: `backend/app/services/security_service.py` | Típus | Leírás | |-------|--------| | `CHANGE_ROLE` | Szerepkör módosítás | | `SET_VIP` | VIP státusz | | `WALLET_ADJUST` | Pénztárca módosítás | | `SOFT_DELETE_USER` | Felhasználó törlés | | `ORGANIZATION_TRANSFER` | Szervezet átadás | ### 2.6 JWT Token Felépítése Forrás: `backend/app/api/v1/endpoints/auth.py:108` ```json { "sub": "user_id", "role": "superadmin", "rank": 100, "scope_level": "individual", "scope_id": "user_id_vagy_org_id" } ``` --- ## 3. Frontend Réteg ### 3.1 Frontend Auth Store Forrás: `frontend/src/stores/authStore.ts:4` ```typescript export type UserRole = 'guest' | 'user' | 'manager' | 'admin' | 'superadmin' ``` > ⚠️ **Probléma**: A frontend `UserRole` típus **NEM egyezik** a backend `UserRole` enum-jával! Hiányzik: `region_admin`, `country_admin`, `moderator`, `sales_agent`, `service_owner`, `fleet_manager`, `driver`. ### 3.2 Router Admin Guard Forrás: `frontend/src/router/index.ts:133` ```typescript const adminRoles = ['superadmin', 'admin', 'region_admin', 'country_admin', 'moderator'] ``` Ez a lista egyezik a backend `get_current_admin` függvényével. --- ## 4. Problémák és Hiányosságok ### 🔴 KRITIKUS Problémák | # | Probléma | Hely | Hatás | |---|----------|------|-------| | P1 | `fleet.org_roles` tábla ÜRES | OrgRole modell | Dinamikus szerepkör rendszer nem működik | | P2 | Rank map inkonzisztens a UserRole enum-mal | DEFAULT_RANK_MAP vs UserRole | 6 rang sosem kerül kiosztásra | | P3 | Enum duplikáció (kis/nagybetű) | userrole és orgtype adatbázis enumok | Migrációs hiba, karbantartási nehézség | | P4 | Frontend/backend UserRole eltérés | authStore.ts | Frontend hibás role-okat kezel | | P5 | parameter_scope enum 3 sémában | public, system | Inkonzisztens definíciók | ### 🟡 FIGYELMEZTETÉS | # | Probléma | Hely | Hatás | |---|----------|------|-------| | W1 | Csak `global` scope használatban | system_parameters | Hierarchikus paraméterezés nem kihasznált | | W2 | Minden user `individual` scope_level | users tábla | Többszintű scope nincs implementálva | | W3 | Nincs explicit "deny" mechanizmus | RBAC rendszer | Csak elégtelen rangot jelez, explicit tiltás nincs | | W4 | custom_permissions nincs validálva | User modell | Bármilyen JSON elfogadott | --- ## 5. Összefüggés Diagram ```mermaid graph TB subgraph Frontend FS[authStore.ts
UserRole: guest/user/manager/admin/superadmin] RG[Router Guard
adminRoles: superadmin, admin,
region_admin, country_admin, moderator] end subgraph API_Layer JWT[JWT Token payload
sub + role + rank + scope_level + scope_id] DC[Dual Control SecurityService
5 művelettípus] end subgraph Backend UR[UserRole enum
10 érték] RM[DEFAULT_RANK_MAP
16 rang - csak 10 használható] RBAC[RBAC osztály
3 szint: superadmin + rank + capabilities] GR[get_current_admin
5 engedélyezett szerepkör] end subgraph Database U[identity.users
role + scope_level + scope_id + custom_permissions] OM[fleet.organization_members
role + permissions JSON] OR[fleet.org_roles
🔴 ÜRES! Nincs seed data] SP[system.system_parameters
scope_level + scope_id - csak global használva] PA[system.pending_actions
Dual Control tároló] end FS -- eltérő role halmaz --> UR JWT -- kiolvassa --> U RBAC -- ellenőrzi --> RM GR -- engedélyezi --> UR DC -- naplóz --> PA OR -- üres, nem használható --> OM ``` --- ## 6. Azonosított Problémák Részletesen ### P1: `fleet.org_roles` tábla üres - A dinamikus szerepkör rendszer teljesen kiépített (OrgRole modell, OrgUserRole enum) - De a `fleet.org_roles` táblában egyetlen rekord sincs - Következmény: a `organization_members.role` mező validálatlan string-ként működik ### P2: DEFAULT_RANK_MAP inkonzisztencia - A `DEFAULT_RANK_MAP` tartalmaz olyan rangokat (AUDITOR, ORGANIZATION_OWNER, PREMIUM_USER, GUEST), amelyek nem szerepelnek a `UserRole` enum-ban - Ezek a rangok soha nem kerülnek kiosztásra - Megoldás: vagy bővíteni a `UserRole` enumot, vagy törölni a felesleges rangokat ### P3: Enum duplikáció - A `userrole` enum minden értéke kétszer szerepel (kis és NAGY betűs változat) - Az `orgtype` enum értékei szintén duplikáltak (business/BUSINESS, stb.) - Ez a korábbi migrációk során keletkezett ### P4: Frontend-Backend eltérés - A frontend auth store 5 role-t definiál: guest, user, manager, admin, superadmin - A backend 10 role-t: superadmin, admin, region_admin, country_admin, moderator, sales_agent, user, service_owner, fleet_manager, driver - A `manager` frontend role nem létezik a backendben, a `region_admin` és `country_admin` és `moderator` hiányzik a frontendből ### P5: Hierarchikus scope nem kihasznált - A `ParameterScope` enum (GLOBAL, COUNTRY, REGION, ORGANIZATION, USER) teljesen kiépített - De minden `system_parameter` `global` scope_level-lel rendelkezik - A hierarchikus paraméterezés (ország → régió → szervezet → felhasználó) nincs implementálva