security

command
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 9, 2026 License: MIT Imports: 13 Imported by: 0

README

Security: sessioni e documenti

Esempio eseguibile con repository in memoria e binding DI generici. Non richiede un database né un provider esterno. Il flusso è:

cookie session → SessionCredentials → VerifiedSession → AppPrincipal
              → controller → servizio → policy sul Document → repository

security.go contiene extractor, authenticator, resolver, policy e servizio; store.go i repository e i dati dimostrativi; main.go controller e router; compose.go le registrazioni DI. pfw_gen.go viene generato dalla CLI. La guida security documenta i contratti del framework.

Avvio

Dalla root del repository:

go generate ./examples/security
go run ./examples/security

Il server ascolta su 127.0.0.1:8080. SIGINT/SIGTERM eseguono lo shutdown attraverso il lifecycle Palma. Le sessioni dimostrative durano un'ora dall'avvio.

# GET opzionale: 200, authenticated=false senza cookie
curl http://127.0.0.1:8080/me

# Principal costruito dai dati dell'utente applicativo
curl -b 'session=demo-alice' http://127.0.0.1:8080/me

# Proprietario: 204, aggiorna doc-1
curl -i -X PATCH -b 'session=demo-alice' \
  -H 'Content-Type: application/json' -d '{"title":"Updated"}' \
  http://127.0.0.1:8080/documents/doc-1

# Altro proprietario: 403
curl -i -X PATCH -b 'session=demo-alice' \
  -H 'Content-Type: application/json' -d '{"title":"Denied"}' \
  http://127.0.0.1:8080/documents/doc-2

# Admin nella stessa organizzazione: 204
curl -i -X PATCH -b 'session=demo-admin' \
  -H 'Content-Type: application/json' -d '{"title":"Updated by admin"}' \
  http://127.0.0.1:8080/documents/doc-2

Un admin dell'organizzazione one non può modificare doc-3 di two. demo-bob possiede doc-2; demo-disabled produce 403; demo-expired, demo-revoked, demo-deleted e sessioni sconosciute producono 401. Anche /me, pur opzionale, rifiuta credenziali presenti ma non valide.

Il mapper condiviso gestisce errori di autenticazione, autorizzazione e documenti mancanti. La policy viene eseguita nel servizio anche fuori da HTTP. Il router applica http.CrossOriginProtection alle richieste che modificano lo stato, con diniego 403 attraverso lo stesso mapper.

Le sessioni sono fixture pubbliche: l'esempio non include login, generazione di sessioni, password, emissione dei cookie o una persistenza reale. Un'applicazione deve implementare questi flussi e la propria protezione delle sessioni/cookie. Il framework non interpreta ID, ruoli o organizzazioni dell'applicazione.

Verifica

go run ./cmd/pfw generate -check ./examples/security
go test -race ./examples/security ./security/... ./transport/echo

I test attraversano il composition root generato e verificano sessioni valide, scadute e revocate, utenti eliminati/disabilitati, ownership, isolamento delle organizzazioni, autenticazione opzionale, protezione cross-origin e assenza di modifiche ai documenti quando l'accesso è negato.

Documentation

Overview

This example uses seeded, in-memory sessions, not a login/session issuer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL