Role i uprawnienia
API używa tokenów Sanctum do identyfikacji użytkownika, a decyzję o dostępie podejmuje na podstawie aktualnych ról i uprawnień zapisanych w bazie danych.
Model danych
| Tabela | Znaczenie |
|---|---|
roles |
Role biznesowe: pracownik, przelozony, kierownik, admin, super_admin. |
permissions |
Pojedyncze uprawnienia techniczne, np. employees.view albo payrolls.manage. |
permission_role |
Przypisanie uprawnień do roli. |
role_user |
Przypisanie ról do użytkownika. |
Jak działa request
- Klient wysyła token w nagłówku
Authorization: Bearer {token}. - Sanctum rozpoznaje użytkownika przypisanego do tokenu.
- Middleware
permissionsprawdza role użytkownika i ich uprawnienia w bazie. - Jeżeli użytkownik ma wymagany permission, request przechodzi do kontrolera.
- Jeżeli permissiona brakuje, API zwraca
403 Forbidden.
Endpointy RBAC
| Metoda | Endpoint | Wymagane uprawnienie | Opis |
|---|---|---|---|
| GET | /api/v1/permissions |
access.view lub access.manage |
Lista uprawnień dostępnych w systemie. |
| GET | /api/v1/roles |
access.manage |
Lista ról wraz z przypisanymi uprawnieniami. |
| POST | /api/v1/roles |
access.manage |
Utworzenie roli. |
| PUT | /api/v1/roles/{role}/permissions |
access.manage |
Nadpisanie listy permissionów przypisanych do roli. |
| PUT | /api/v1/users/{user}/roles |
access.manage |
Nadpisanie listy ról przypisanych do użytkownika. |
Przykład przypisania ról użytkownikowi
PUT /api/v1/users/7/roles
Authorization: Bearer {token}
Content-Type: application/json
{
"roles": [
"przelozony",
"pracownik"
]
}
Przykład przypisania uprawnień roli
PUT /api/v1/roles/3/permissions
Authorization: Bearer {token}
Content-Type: application/json
{
"permissions": [
"employees.view",
"requests.view",
"request-decisions.manage"
]
}
Obsługa po stronie frontendu
- Po logowaniu zapisz token zwrócony przez API.
- Wywołaj
GET /api/v1/auth/me. - Zapisz z odpowiedzi tablice
rolesipermissions. - Ukrywaj elementy interfejsu, jeżeli użytkownik nie ma wymaganego permissiona.
- Zawsze traktuj backend jako źródło prawdy, bo frontendowe ukrywanie przycisków nie jest zabezpieczeniem.
Odpowiedź przy braku uprawnień
{
"message": "Brak uprawnień do wykonania tej operacji."
}
Kod HTTP: 403