dev-blog

source .venv/bin/activate   # Linux / macOS
uvicorn app.main:app --reload

Zobaczmy, co jest nie tak z tworzeniem permissions. Problem najczęściej wynika z dwóch rzeczy:

  1. Token JWT nie został prawidłowo skopiowany do Authorize
  2. Brak roli guard przed przypisaniem do niej permission

Zróbmy krok po kroku:

KROK 1️⃣ Sprawdź czy token jest w Authorize

Otwórz swagger (/docs) i kliknij 🔒 Authorize (http://127.0.0.1:8000/docs#)

Upewnij się, że:

Przykład poprawnego formatu:

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbGljZSIsImV4cCI6MTcxMjM0NTYwMH0.abc123def456

UWAGA! Powyżej jest konwencja ale mój setup nie wymaga ‘Bearer ‘, tylko token !

Kliknij:

KROK 2️⃣ Sprawdź czy rola istnieje

WAŻNE: Najpierw musisz przypisać rolę użytkownikowi, dopiero potem można dodać do niej permission.

Najpierw wykonaj:

Kliknij: POST /roles/assign

{
  "username": "alice",
  "role": "guard"
}

Execute - powinno zwrócić 200 OK

KROK 3️⃣ Teraz spróbuj dodać permission

Kliknij: POST /permissions/create

Wypełnij:

Execute


Jeśli nadal błąd, zrób pełną sekwencję:

1. Zarejestruj użytkownika

curl -X POST "http://localhost:8000/auth/register" \
  -H "Content-Type: application/json" \
  -d '{"username": "alice", "password": "secret"}'

2. Zaloguj się i skopiuj token

curl -X POST "http://localhost:8000/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"username": "alice", "password": "secret"}'

Odpowiedź będzie:

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer"
}

3. Przypisz rolę

curl -X POST "http://localhost:8000/roles/assign" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -d '{"username": "alice", "role": "guard"}'

4. Teraz dodaj permission

curl -X POST "http://localhost:8000/permissions/create" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "resource": "door1",
    "action": "access",
    "role_name": "guard"
  }'

Częste problemy i rozwiązania:

❌ Problem 1: “Invalid or expired token”

Rozwiązanie: Skopiuj token dokładnie bez cudzysłowów

❌ Problem 2: “User not found” w roles/assign

Rozwiązanie: Upewnij się że username jest poprawny (alice)

❌ Problem 3: Role nie istnieje w permissions/create

Rozwiązanie: Najpierw wykonaj /roles/assign dla roli guard

❌ Problem 4: W Swagger nie działa żadna operacja z Auth

Rozwiązanie:

  1. Kliknij 🔒 Authorize
  2. Kliknij Logout
  3. Wpisz token ponownie od początku
  4. Kliknij AuthorizeClose

Aby sprawdzić czy działa, wykonaj test:

# Sprawdź permission
curl -X POST "http://localhost:8000/permissions/check" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "resource": "door1",
    "action": "access"
  }'

Powinno zwrócić:

{
  "allowed": true
}

Jeśli nadal nie działa, podaj dokładny komunikat błędu, a znajdziemy rozwiązanie.