Dokumentacja API

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

  1. Klient wysyła token w nagłówku Authorization: Bearer {token}.
  2. Sanctum rozpoznaje użytkownika przypisanego do tokenu.
  3. Middleware permission sprawdza role użytkownika i ich uprawnienia w bazie.
  4. Jeżeli użytkownik ma wymagany permission, request przechodzi do kontrolera.
  5. 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

  1. Po logowaniu zapisz token zwrócony przez API.
  2. Wywołaj GET /api/v1/auth/me.
  3. Zapisz z odpowiedzi tablice roles i permissions.
  4. Ukrywaj elementy interfejsu, jeżeli użytkownik nie ma wymaganego permissiona.
  5. 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