| Crates.io | hodei-kernel |
| lib.rs | hodei-kernel |
| version | 0.1.0 |
| created_at | 2025-10-17 01:25:21.817785+00 |
| updated_at | 2025-10-17 01:25:21.817785+00 |
| description | Core types and traits for Hodei authorization system with Cedar Policy |
| homepage | https://github.com/Rubentxu/hodei-policies |
| repository | https://github.com/Rubentxu/hodei-policies |
| max_upload_size | |
| id | 1886987 |
| size | 54,762 |
Motor de autorización avanzado construido en Rust con Cedar Policy, diseñado para aplicaciones multi-tenant seguras y escalables.
hodei-policies/
├── kernel/ # Tipo Hrn (identidad fuerte)
├── hodei_provider/ # Traits y colección de esquema
├── hodei_provider_derive/ # Macros procedurales
├── hodei_domain/ # Modelos de dominio
├── src/
│ ├── auth.rs # Servicio de autorización
│ ├── mapper.rs # Servicio de mapeo genérico
│ └── main.rs # Handlers Axum
└── migrations/ # Migraciones PostgreSQL
# Levantar todos los servicios
make docker-up
# Ejecutar tests de API
make test
# Ver logs
make docker-logs
# Detener servicios
make docker-down
# 1. Configurar entorno
cp .env.example .env
# 2. Levantar solo PostgreSQL
docker-compose up -d postgres
# 3. Ejecutar migraciones
make migrate
# 4. Compilar y ejecutar
make run
# 5. En otra terminal, ejecutar tests
make test
Los tests validan todos los requisitos arquitectónicos:
# Ejecutar tests
./tests/api_tests.sh
# O con make
make test
make help # Ver todos los comandos
make build # Compilar aplicación
make run # Ejecutar localmente
make test # Ejecutar tests de API
make docker-up # Levantar servicios Docker
make docker-down # Detener servicios
make docker-test # Test completo con Docker
make migrate # Ejecutar migraciones
make schema # Regenerar esquema Cedar
make logs-app # Ver logs de la aplicación
make logs-db # Ver logs de PostgreSQL
make shell-db # Abrir psql
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/hodei_policies
RUST_LOG=info
El sistema incluye usuarios pre-configurados:
| Token | Role | Tenant | Descripción |
|---|---|---|---|
alice |
admin | tenant-a | Administrador tenant A |
bob |
user | tenant-b | Usuario tenant B |
# Crear documento
POST /documents
Authorization: Bearer {token}
Content-Type: application/json
{
"resource_id": "doc1",
"is_public": false
}
# Leer documento
GET /documents/{resource_id}
Authorization: Bearer {token}
# Actualizar documento
PUT /documents/{resource_id}
Authorization: Bearer {token}
Content-Type: application/json
{
"is_public": true
}
# Eliminar documento
DELETE /documents/{resource_id}
Authorization: Bearer {token}
# Agregar/actualizar política
POST /_api/policies/{policy_id}
Content-Type: text/plain
permit(principal, action, resource) when { ... };
curl -X POST http://localhost:3000/documents \
-H "Authorization: Bearer alice" \
-H "Content-Type: application/json" \
-d '{"resource_id":"my-doc","is_public":false}'
curl http://localhost:3000/documents/my-doc \
-H "Authorization: Bearer alice"
curl -X POST http://localhost:3000/_api/policies/my_policy \
-H "Content-Type: text/plain" \
-d 'permit(principal, action, resource) when { principal.role == "admin" };'
forbid(principal, action, resource)
unless {
principal.tenant_id == resource.tenant_id
};
permit(principal, action, resource)
when {
resource.owner_id == principal.id
};
permit(principal, action == Action::"Create", resource)
when {
principal.role == "admin"
};
El sistema usa schema-as-code. Para agregar una nueva entidad:
// En hodei_domain/src/lib.rs
#[derive(Debug, Serialize, Deserialize, Clone, HodeiEntity, sqlx::FromRow)]
#[hodei(entity_type = "HodeiMVP::Project")]
pub struct Project {
pub id: Hrn,
pub name: String,
pub owner_id: Hrn,
}
#[derive(Debug, Clone, HodeiAction)]
#[hodei(namespace = "HodeiMVP")]
pub enum ProjectCommand {
#[hodei(principal = "User", resource = "Project", creates_resource)]
Create(ProjectCreatePayload),
#[hodei(principal = "User", resource = "Project")]
Read { id: Hrn },
}
El esquema Cedar se actualizará automáticamente en la próxima compilación.
# Verificar que PostgreSQL esté corriendo
docker-compose ps
# Ver logs de PostgreSQL
make logs-db
# Reiniciar servicios
make docker-down && make docker-up
# Verificar que la aplicación esté corriendo
curl http://localhost:3000/health || echo "App no responde"
# Ver logs de la aplicación
make logs-app
# Esperar más tiempo para que los servicios inicien
sleep 10 && make test
# Regenerar esquema
make schema
# Verificar que hodei_domain esté enlazado en build.rs
grep "use hodei_domain" build.rs
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)Este proyecto está bajo la licencia MIT.
Desarrollado con ❤️ usando Rust