Skip to content

Panel Admin

Technomantus Corvi edited this page Sep 5, 2026 · 1 revision

Panel de administración (tanuki_admin)

Un panel admin ligero inspirado en Django: registra un modelo en un archivo y obtienes una interfaz CRUD de listado/creación/edición/borrado — sin escribir controladores ni vistas por recurso. Completamente aislado dentro de admin/; depende de tanuki_login (requiere un usuario autenticado con is_admin = 1).

Qué incluye

Pieza Archivo
Registro de recursos admin/admin.php — declara qué modelos aparecen y cómo
Controlador genérico admin/AdminController.php — un controlador maneja todos los recursos registrados
Plantillas admin/templates/*.php — independientes del layout de la app principal
Script de superusuario admin/create-superuser.php

Configuración

1. Añade la columna is_admin

-- MySQL/MariaDB
ALTER TABLE users ADD COLUMN is_admin TINYINT(1) DEFAULT 0;
-- PostgreSQL
ALTER TABLE users ADD COLUMN is_admin BOOLEAN DEFAULT false;

2. Crea tu primera cuenta de administrador

php admin/create-superuser.php

Pide nombre, email, contraseña; inserta el usuario con is_admin = 1.

3. Registra tus modelos

// admin/admin.php
return [
    'todo' => [
        'model'       => TodoModel::class,
        'label'       => 'Tareas',
        'list_fields' => ['id', 'title', 'completed', 'created_at'],
        'form_fields' => [
            'title'       => ['type' => 'text',     'label' => 'Título'],
            'description' => ['type' => 'textarea', 'label' => 'Descripción'],
            'completed'   => ['type' => 'checkbox', 'label' => 'Completada'],
        ],
        'order_by'  => 'created_at',
        'order_dir' => 'DESC',
    ],
];

Tipos de campo: text, textarea, checkbox, password. El tipo password nunca muestra el hash guardado y solo actualiza el campo si no está vacío — obligatorio al crear, opcional (mantiene el valor actual) al editar.

4. Activa las rutas

// routes.php — principio del archivo
require_once __DIR__ . '/admin/AdminController.php';

// array de rutas
'GET    /admin'                      => 'AdminController@dashboard',
'GET    /admin/{resource}'           => 'AdminController@index',
'GET    /admin/{resource}/create'    => 'AdminController@create',
'POST   /admin/{resource}'           => 'AdminController@store',
'GET    /admin/{resource}/{id}/edit' => 'AdminController@edit',
'PUT    /admin/{resource}/{id}'      => 'AdminController@update',
'DELETE /admin/{resource}/{id}'      => 'AdminController@destroy',

Personalizar las plantillas

admin/templates/layout.php, dashboard.php, index.php, form.php son PHP puro — edítalas directamente. AdminController::render() no usa el view() de la app principal, así que las plantillas de admin son totalmente independientes de includes/head.php/footer.php.

Cambiar contraseñas: la tuya vs. la de otro usuario

  • La tuya: /profile (de tanuki_login) — pide la contraseña actual.
  • La de otro usuario: registra users en admin/admin.php y edítalo desde /admin/users — sin comprobación de contraseña actual, ya que es una acción de administrador sobre la cuenta de otra persona.

Eliminar la extensión

Borra la carpeta admin/, quita el require_once y las rutas de routes.php. Nada más en el proyecto referencia admin/.

Clone this wiki locally