feat: añadir paquete pkg/acl para control de acceso puro

Nuevo paquete puro (sin I/O) que implementa RBAC basado en roles.
Incluye: ACL, Role, RoleDef, FromMap constructor, CanDo para verificar
permisos, RoleFor para resolver rol de un usuario, y soporte para
wildcards tanto en usuarios ("*") como en acciones ("command:*").
Incluye tests completos cubriendo: ACL vacío, admin wildcard, acciones
específicas, prefix wildcards, prioridad exacto>wildcard, y múltiples
roles por usuario.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-07 17:59:00 +00:00
parent a726a5b73b
commit 386e4d3dcb
3 changed files with 295 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
package acl
// RoleDef is the input shape for building an ACL — matches config.RoleCfg.
type RoleDef struct {
Users []string
Actions []string
}
// FromMap builds an ACL from a map of role name → RoleDef.
// This is the primary constructor used from the runtime.
func FromMap(roles map[string]RoleDef) ACL {
var rs []Role
for name, def := range roles {
rs = append(rs, Role{
Name: name,
Users: def.Users,
Actions: def.Actions,
})
}
return ACL{roles: rs}
}