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:
guard przed przypisaniem do niej permissionZróbmy krok po kroku:
/docs) i kliknij 🔒 Authorize (http://127.0.0.1:8000/docs#)Upewnij się, że:
Bearer (z dużej litery)Bearer jest spacjaPrzykład poprawnego formatu:
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbGljZSIsImV4cCI6MTcxMjM0NTYwMH0.abc123def456
UWAGA! Powyżej jest konwencja ale mój setup nie wymaga ‘Bearer ‘, tylko token !
Kliknij:
WAŻNE: Najpierw musisz przypisać rolę użytkownikowi, dopiero potem można dodać do niej permission.
Kliknij: POST /roles/assign
{
"username": "alice",
"role": "guard"
}
Execute - powinno zwrócić 200 OK
Kliknij: POST /permissions/create
Wypełnij:
resource: door1action: accessrole_name: guardExecute
curl -X POST "http://localhost:8000/auth/register" \
-H "Content-Type: application/json" \
-d '{"username": "alice", "password": "secret"}'
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"
}
curl -X POST "http://localhost:8000/roles/assign" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{"username": "alice", "role": "guard"}'
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"
}'
Rozwiązanie: Skopiuj token dokładnie bez cudzysłowów
Rozwiązanie: Upewnij się że username jest poprawny (alice)
Rozwiązanie: Najpierw wykonaj /roles/assign dla roli guard
Rozwiązanie:
# 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.