Files
service-finder/docs/permission_system_audit_2026-06-18.md

276 lines
9.9 KiB
Markdown

# 🔐 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<br/>UserRole: guest/user/manager/admin/superadmin]
RG[Router Guard<br/>adminRoles: superadmin, admin,<br/>region_admin, country_admin, moderator]
end
subgraph API_Layer
JWT[JWT Token payload<br/>sub + role + rank + scope_level + scope_id]
DC[Dual Control SecurityService<br/>5 művelettípus]
end
subgraph Backend
UR[UserRole enum<br/>10 érték]
RM[DEFAULT_RANK_MAP<br/>16 rang - csak 10 használható]
RBAC[RBAC osztály<br/>3 szint: superadmin + rank + capabilities]
GR[get_current_admin<br/>5 engedélyezett szerepkör]
end
subgraph Database
U[identity.users<br/>role + scope_level + scope_id + custom_permissions]
OM[fleet.organization_members<br/>role + permissions JSON]
OR[fleet.org_roles<br/>🔴 ÜRES! Nincs seed data]
SP[system.system_parameters<br/>scope_level + scope_id - csak global használva]
PA[system.pending_actions<br/>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