276 lines
9.9 KiB
Markdown
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
|