Files
egutierrez 47fac22230 chore: auto-commit (799 archivos)
- .claude/CLAUDE.md
- .claude/commands/subagentes.md
- .claude/rules/INDEX.md
- .mcp.json
- bash/functions/cybersecurity/analyze_dns.md
- bash/functions/cybersecurity/audit_http_headers.md
- bash/functions/cybersecurity/audit_ssh_config.md
- bash/functions/cybersecurity/check_firewall.md
- bash/functions/cybersecurity/detect_suspicious_users.md
- bash/functions/cybersecurity/encrypt_file.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 00:28:20 +02:00

2.2 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
rbac_middleware function go infra 1.0.0 impure func RBACMiddleware(roles []Role, required Permission) Middleware Middleware HTTP que verifica que el usuario autenticado tenga un permiso concreto. Lee las claims del context (puestas por JWTMiddleware), extrae el rol de claims.Custom[role] y evalua con RBACCheck. Responde 403 si no tiene permiso, 401 si no hay claims.
rbac
auth
middleware
http
server
infra
pendiente-usar
rbac_check_go_infra
http_error_response_go_infra
Role_go_infra
Permission_go_infra
Middleware_go_infra
HTTPError_go_infra
Middleware_go_infra
false error_go_core
net/http
name desc
roles matriz de roles y sus permisos, usualmente hardcoded o leida de config al arrancar
name desc
required permiso requerido para acceder al handler (Resource + Action)
Middleware que bloquea el request con 403 si el rol del usuario no tiene el permiso requerido true
pasa con rol que tiene el permiso
403 con rol sin permiso
403 con rol inexistente
401 si no hay claims en el context
functions/infra/rbac_middleware_test.go functions/infra/rbac_middleware.go

Ejemplo

roles := []Role{
    {Name: "admin", Permissions: []Permission{{Resource: "users", Action: "delete"}}},
}
adminProtected := HTTPMiddlewareChain(
    JWTMiddleware(secret),
    RBACMiddleware(roles, Permission{Resource: "users", Action: "delete"}),
)
mux.Handle("DELETE /api/users/{id}", adminProtected(deleteUserHandler))

Notas

Impura — depende del estado del request y de JWTMiddleware. El rol se lee de claims.Custom["role"] como string: si la app usa otro campo (ej: claims.Custom["roles"] como slice) conviene crear un middleware variante. Si el usuario tiene multiples roles, extenderse iterando RBACCheck sobre cada uno. Orden en la chain: SIEMPRE JWTMiddleware antes — si se olvida, el middleware retorna 401 con code no_claims para facilitar debugging. No cachea la evaluacion: RBACCheck es O(roles*permisos) pero para listas pequeñas (<100) es despreciable.