Skip to content

atari-monk/access-guard

Repository files navigation

AccessGuard – Role-Based Access Control API

Live demo: https://access-guard.onrender.com/docs


Opis projektu

AccessGuard to system RBAC (Role-Based Access Control) napisany w Pythonie z FastAPI.
Pozwala na:

  • Rejestrację i logowanie użytkowników z JWT
  • Tworzenie ról i przypisywanie uprawnień
  • Sprawdzanie dostępu użytkowników do zasobów
  • Deployment w Dockerze (lokalnie i w chmurze)

Projekt jest produkcyjnie przygotowany, a jego demo działa w Render.com.


Funkcjonalności

  1. Rejestracja użytkowników (/auth/register)
  2. Logowanie (/auth/login) → JWT
  3. Role i uprawnienia:
    • Tworzenie ról i uprawnień
    • Przypisywanie ról użytkownikom
    • Sprawdzanie dostępu użytkowników (/permissions/check)
  4. Swagger UI i Redoc:
    • /docs → Swagger (interaktywne testowanie)
    • /redoc → alternatywna dokumentacja

Technologie

  • Python 3.11
  • FastAPI – framework API
  • SQLAlchemy – ORM
  • SQLite (demo) / przygotowane pod Postgresa
  • Docker + docker-compose
  • Render.com – hosting darmowy, live demo
  • Pytest + pytest-asyncio – testy integracyjne

Demo online

Można stworzyć testowych użytkowników i zalogować się, aby sprawdzić role i permissions.

  • POST/auth/register
{
  "username": "alice",
  "password": "secret"
}
  • POST/auth/login
{
  "username": "alice",
  "password": "secret"
}

skopiuj token w odpowiedzi i wklej do przycisku Authorize (UWAGA! jest config bez wpisywania Bearer)

  • POST/permissions/create
{
  "resource": "door1",
  "action": "open",
  "role_name": "guard"
}
  • POST/roles/assign
{
  "username": "alice",
  "role": "guard"
}
  • POST/permissions/check
{
  "resource": "door1",
  "action": "open"
}

Uruchomienie lokalne

  1. Skopiuj repozytorium:
git clone <repo-url>
cd access-guard
  1. Uruchom w Dockerze:
docker compose up --build

albo

uvicorn app.main:app --reload
  1. Otwórz Swagger:
http://localhost:8000/docs

Konfiguracja środowiska (Render / lokalnie)

  • SECRET_KEY – losowy, długi string (JWT)
  • PORT8000 (Render wymaga)
  • PYTHONUNBUFFERED1 (opcjonalnie dla logów)

Na Render.com SQLite zapisuje się w /tmp/accessguard.db Produkcyjnie można podmienić na Postgres lub inny DBMS przez DATABASE_URL.


Testy

Projekt zawiera testy integracyjne w tests/test_auth.py. Uruchom:

pytest

Struktura projektu

access-guard/
├── app/
│   ├── core/          # openapi, security, tags
│   ├── services/      # auth_service, permission_service
│   ├── main.py        # FastAPI app + endpoints
│   ├── models.py      # SQLAlchemy models
│   ├── schemas.py     # Pydantic schemas
│   └── database.py    # DB setup
├── tests/             # testy integracyjne
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── README.md

Lekcje i nauka

  • Deployment w chmurze bez karty kredytowej (Render.com)
  • Docker i docker-compose w praktyce
  • JWT i RBAC w aplikacjach webowych
  • Projektowanie API + Swagger UI
  • Testy integracyjne + automatyzacja

Screenshots

Swagger UI

Swagger UI demo


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published