Skip to content

Acciones de Fila, Toolbar & ACL 🛡️

Gestiona quién puede ver, editar o eliminar cada registro mediante una combinación de permisos globales (RBAC) y control de acceso a nivel de fila (ACL).


🎬 Acciones Estándar de Fila

php
use Warrior\SchemaBuilder\Table\RowAction;

$table
    ->showAction(enabled: true, permission: 'users.show')
    ->updateAction(enabled: true, permission: 'users.update')
    ->deleteAction(enabled: true, permission: 'users.delete');

Si el usuario actual en el frontend carece del permiso 'users.delete', el botón de eliminar se elimina del DOM.


🛠️ Acciones Personalizadas de Fila

Puedes agregar cualquier acción con iconos y colores personalizados:

php
$table->addRowAction(
    RowAction::make('reset_password', 'Restablecer Clave')
        ->icon('tabler-key')
        ->color('warning')
        ->permission('users.security')
);

$table->addRowAction(
    RowAction::make('impersonate', 'Suplantar Usuario')
        ->icon('tabler-user-check')
        ->color('info')
        ->permission('superadmin')
);

🔒 Control de Acceso por Fila (Row-Level ACL)

¿Qué pasa si un usuario tiene el permiso global 'users.delete', pero no debe poder eliminar a su propio usuario o al Administrador principal?

Para eso existe el sistema de ACL Contextual por Fila:

php
$table->acl(key: 'acl', actionMap: [
    'show'   => 'show',
    'update' => 'update',
    'delete' => 'delete',
]);

Cuando tu API retorna los registros con una clave acl:

json
{
  "id": 1,
  "name": "Super Admin",
  "acl": {
    "show": true,
    "update": true,
    "delete": false
  }
}

El frontend (DynamicDataTable.vue) evalúa tanto el permiso global como el booleano item.acl.delete: si acl.delete es false, el botón de eliminar se deshabilita u oculta para esa fila específica, impidiendo acciones indebidas.

Liberado bajo la Licencia MIT.