Instant declarative Auto-CRUD Admin Dashboard generator for LiteORM, LiteValidate, LiteExport, and LiteAudit in PHP 8.2+. Zero npm, zero node_modules, and zero build step required.
- Instant Auto-CRUD via Attributes:
- Simply annotate an entity with
#[AdminResource(title: 'Products', group: 'Sales')]to instantly generate complete List, Search, Filter, Pagination, Create, Edit, and Delete views. - Fine-tune table columns via
#[AdminColumn(label: 'Price', sortable: true, format: 'currency')]. - Customize form inputs via
#[AdminField(type: 'number', placeholder: 'Enter price')].
- Simply annotate an entity with
- Integrated Ecosystem Synergy:
LiteORM: Powers pagination (Paginator), cursor-driven batch streaming, and entity persistence.LiteValidate: Automatically enforces#[Required],#[Email], etc., rendering inline validation errors with HTTP 422.LiteExport: Built-in "📥 Export Excel" button streams XLSX spreadsheets directly to the browser with O(1) memory.LiteAudit: Detail view displays an integrated chronological change history timeline ("Audit Trail") showing field deltas and author tracking.
- RBAC & Action-Level Permission Guard:
- Declaratively protect resources using
#[Authorize(roles: ['admin', 'manager'])]or granular action gates#[Authorize(permissions: ['catalog.delete'], action: 'delete')]. - Built-in
PermissionGatewith superadmin bypass, fail-closed security, and pluggable user resolver.
- Declaratively protect resources using
- Modern Responsive Design:
- Embedded CSS stylesheet with automated Dark/Light theme switching (
prefers-color-scheme). - No Webpack, no Vite, and no Node.js runtime required.
- Embedded CSS stylesheet with automated Dark/Light theme switching (
composer require kzxl/lite-adminTo pull directly from the official GitHub repository without waiting for Packagist synchronization, add the VCS repository to your project's composer.json:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/kzxl/LiteAdmin.git"
}
],
"require": {
"kzxl/lite-admin": "^1.1.0"
}
}Or configure via CLI:
composer config repositories.lite-admin vcs https://github.com/kzxl/LiteAdmin.git
composer require kzxl/lite-admin:^1.1.0For local development where changes should reflect immediately via symlink:
{
"repositories": [
{
"type": "path",
"url": "../libs/LiteAdmin",
"options": {
"symlink": true
}
}
],
"require": {
"kzxl/lite-admin": "@dev"
}
}use LiteAdmin\Attribute\{AdminResource, AdminColumn, AdminField, Authorize};
use LiteORM\Attribute\{Entity, Table, Id, AutoIncrement, Column};
use LiteValidate\Attribute\{Required, Range};
use LiteAudit\Attribute\Auditable;
#[Entity]
#[Table('products')]
#[Auditable(events: ['create', 'update', 'delete'], tag: 'catalog')]
#[AdminResource(title: 'Products', slug: 'products', icon: 'package', group: 'Sales', order: 1)]
#[Authorize(roles: ['manager', 'admin'], action: 'create')]
#[Authorize(permissions: ['catalog.delete'], action: 'delete')]
class Product
{
#[Id, AutoIncrement]
public int $id;
#[Required]
#[Column(length: 150)]
#[AdminColumn(label: 'Product Name', sortable: true, searchable: true)]
#[AdminField(label: 'Product Name', placeholder: 'Enter product name...')]
public string $name;
#[Range(min: 0)]
#[Column]
#[AdminColumn(label: 'Price', format: 'currency')]
#[AdminField(label: 'Price', type: 'number')]
public float $price;
#[Column(nullable: true)]
#[AdminColumn(label: 'In Stock', format: 'boolean')]
#[AdminField(label: 'In Stock', type: 'checkbox')]
public bool $inStock = true;
}use LiteAdmin\AdminDashboard;
use LiteAudit\AuditManager;
use LiteAudit\Bridge\LiteOrmAuditBridge;
use LiteAudit\Storage\PdoAuditStorage;
use LiteORM\EntityManager;
use Slim\Factory\AppFactory;
$app = AppFactory::create();
// 1. Setup LiteORM & LiteAudit
$em = new EntityManager('sqlite:app.db');
$auditStorage = new PdoAuditStorage($em->getConnection()->getWriteConnection());
$auditStorage->createSchemaIfNotExists();
$auditManager = new AuditManager($auditStorage);
LiteOrmAuditBridge::register($em, $auditManager);
// 2. Setup LiteAdmin & User Security Context
$admin = new AdminDashboard($em, $auditManager, '/admin');
$admin->setUserResolver(function ($request): array {
// Extract current authenticated user roles & permissions from session/JWT
return [
'roles' => $request->getAttribute('user_roles', ['manager']),
'permissions' => $request->getAttribute('user_permissions', ['catalog.read', 'catalog.write']),
];
});
$admin->register(Product::class);
$admin->register(User::class);
// 3. Register routes
$admin->registerRoutes($app);
$app->run();Visit /admin in your browser to immediately access your production-ready management backoffice!
- RBAC & Permission Guard: Enforces granular resource and action-level authorization (
view,create,update,delete,export) with#[Authorize]attributes and fail-closed defense. - Stateless HMAC-SHA256 CSRF: Enforces timing-safe token verification across all mutating actions (POST/DELETE) without session locking.
- Mass-Assignment Immunity: Automatically ignores primary keys and fields marked
readonly: true. - SQL Injection Prevention: Column sorting (
sort) is strictly whitelisted against registered resource columns.
composer testRuns test suite using PHPUnit 11 with 100% pass rate.
MIT License — see LICENSE for details.