af2366acb5
Fase 5 del issue 0010 — RBAC y middlewares de auth.
- rbac_check es pura: solo recorre la matriz roles/permisos
- jwt_middleware extrae token del header Authorization: Bearer, valida e
inyecta claims en el context con una key privada (jwtCtxKey struct{})
- rbac_middleware requiere jwt_middleware antes; lee role de claims.Custom
- Helper JWTClaimsFromContext para acceder a las claims desde handlers
- 401 claro si RBAC se usa sin JWT antes (code: no_claims)
21 lines
576 B
Go
21 lines
576 B
Go
package infra
|
|
|
|
// RBACCheck verifica si un rol tiene un permiso concreto.
|
|
// Busca el rol por Name en la slice de roles; si existe itera sus permisos
|
|
// y retorna true si alguno hace match exacto de Resource + Action.
|
|
// Funcion pura — evaluacion de datos en memoria, sin I/O.
|
|
func RBACCheck(roles []Role, roleName string, perm Permission) bool {
|
|
for _, r := range roles {
|
|
if r.Name != roleName {
|
|
continue
|
|
}
|
|
for _, p := range r.Permissions {
|
|
if p.Resource == perm.Resource && p.Action == perm.Action {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
return false
|
|
}
|