---
name: Permission
lang: go
domain: infra
version: "1.0.0"
algebraic: product
definition: |
  type Permission struct {
      Resource string `json:"resource"`
      Action   string `json:"action"`
  }
description: "Permiso RBAC: accion sobre un recurso. Par (resource, action) evaluado por RBACCheck contra los permisos de un rol."
tags: [rbac, permission, auth, infra]
uses_types: []
file_path: "functions/infra/permission.go"
---

## Ejemplo

```go
p := Permission{Resource: "users", Action: "delete"}
if RBACCheck(roles, "admin", p) {
    // el rol admin puede borrar usuarios
}
```

## Notas

Tipo producto — Resource y Action son strings libres, decididos por la app. Convencion: Resource en plural snake_case (`users`, `articles`, `billing_invoices`), Action verbo minusculas (`read`, `write`, `delete`, `admin`). Los wildcards `*` no se interpretan — si quieres "todas las acciones" define una Permission explicita por cada una en el rol, o crea un rol superadmin fuera del sistema RBAC.
