File manager - Edit - /home/webapp69.cm.in.th/u69319090028/Shop/app/Controllers/AdminManagementController.php
Back
<?php /** * AdminManagementController * Super Admin only: Admin list, create, permissions, approval requests, audit log */ require_once __DIR__ . '/../Core/Controller.php'; require_once __DIR__ . '/../Services/AdminUserService.php'; require_once __DIR__ . '/../Services/AdminPermissionService.php'; require_once __DIR__ . '/../Models/AdminAuditLog.php'; require_once __DIR__ . '/../Middleware/AdminMiddleware.php'; require_once __DIR__ . '/../Helpers/Auth.php'; require_once __DIR__ . '/../Helpers/Session.php'; class AdminManagementController extends Controller { private AdminUserService $userService; private AdminPermissionService $permService; private AdminAuditLog $auditLog; public function __construct() { $this->userService = new AdminUserService(); $this->permService = new AdminPermissionService(); $this->auditLog = new AdminAuditLog(); } // ── Admin List ─────────────────────────────────────────── public function index(): void { AdminMiddleware::requirePermission('admin.manage'); $admins = $this->userService->getAdminList(); $this->render('admin/admins/index', [ 'admins' => $admins, 'pageTitle' => 'จัดการ Admin — CARGOO Admin', 'activeNav' => 'admins', ], 'admin'); } // ── Create Admin Form ──────────────────────────────────── public function create(): void { AdminMiddleware::requirePermission('admin.manage'); if (!AdminMiddleware::isSuperAdmin()) { Session::setFlash('danger', 'เฉพาะ Super Admin เท่านั้นที่สร้าง Admin ได้โดยตรง'); $this->redirect('/admin/admins'); } $this->render('admin/admins/create', [ 'pageTitle' => 'เพิ่ม Admin ใหม่ — CARGOO Admin', 'activeNav' => 'admins', ], 'admin'); } // ── Store New Admin ────────────────────────────────────── public function store(): void { AdminMiddleware::requirePermission('admin.manage'); if (!AdminMiddleware::isSuperAdmin()) { $this->redirect('/admin/admins'); } $result = $this->userService->createAdmin($_POST, Auth::id()); Session::setFlash($result['success'] ? 'success' : 'danger', $result['message']); $this->redirect('/admin/admins'); } // ── Edit Admin Permissions ─────────────────────────────── public function edit(string $id): void { AdminMiddleware::requirePermission('admin.manage'); if (!AdminMiddleware::isSuperAdmin()) { $this->redirect('/admin/admins'); } $adminId = (int)$id; $userModel = new \User(); $target = $userModel->findWithRoles($adminId); if (!$target || empty($target['is_super_admin'] === false)) { Session::setFlash('danger', 'ไม่พบ Admin หรือไม่สามารถแก้ไขได้'); $this->redirect('/admin/admins'); } // Prevent editing Super Admin's permissions if (!empty($target['is_super_admin'])) { Session::setFlash('danger', 'ไม่สามารถแก้ไขสิทธิ์ Super Admin'); $this->redirect('/admin/admins'); } $effective = $this->permService->getEffectivePermissions($adminId); $allPerms = AdminPermissionService::allPermissionKeys(); $this->render('admin/admins/edit', [ 'target' => $target, 'effective' => $effective, 'all_perms' => $allPerms, 'pageTitle' => 'แก้ไขสิทธิ์ Admin: ' . e($target['username']) . ' — CARGOO Admin', 'activeNav' => 'admins', ], 'admin'); } // ── Update Admin Permissions ───────────────────────────── public function update(string $id): void { AdminMiddleware::requirePermission('admin.manage'); if (!AdminMiddleware::isSuperAdmin()) { $this->redirect('/admin/admins'); } $targetAdminId = (int)$id; $allPerms = AdminPermissionService::allPermissionKeys(); $granted = $_POST['permissions'] ?? []; $superAdminId = Auth::id(); foreach ($allPerms as $perm) { $isGranted = in_array($perm, $granted, true); $this->permService->setPermission($targetAdminId, $perm, $isGranted, $superAdminId); } $this->auditLog->record($superAdminId, 'admin.permissions.update', 'admins', 'user', $targetAdminId, 'Updated permission set for admin #' . $targetAdminId); Session::setFlash('success', 'อัปเดตสิทธิ์ Admin เรียบร้อยแล้ว'); $this->redirect('/admin/admins'); } // ── Suspend Admin ──────────────────────────────────────── public function suspend(string $id): void { AdminMiddleware::requirePermission('admin.manage'); if (!AdminMiddleware::isSuperAdmin()) { $this->redirect('/admin/admins'); } $result = $this->userService->suspendAdmin((int)$id, Auth::id()); Session::setFlash($result['success'] ? 'success' : 'danger', $result['message']); $this->redirect('/admin/admins'); } // ── Reactivate Admin ───────────────────────────────────── public function reactivate(string $id): void { AdminMiddleware::requirePermission('admin.manage'); if (!AdminMiddleware::isSuperAdmin()) { $this->redirect('/admin/admins'); } $result = $this->userService->reactivateAdmin((int)$id, Auth::id()); Session::setFlash($result['success'] ? 'success' : 'danger', $result['message']); $this->redirect('/admin/admins'); } // ── Admin Creation Requests ────────────────────────────── public function requests(): void { AdminMiddleware::requirePermission('admin.manage'); $data = $this->userService->getAllRequests( isset($_GET['page']) ? (int)$_GET['page'] : 1 ); $data['pending'] = $this->userService->getPendingRequests(); $this->render('admin/admins/requests', array_merge($data, [ 'pageTitle' => 'คำขอสร้าง Admin — CARGOO Admin', 'activeNav' => 'admins', ]), 'admin'); } public function approveRequest(string $id): void { AdminMiddleware::requirePermission('admin.manage'); if (!AdminMiddleware::isSuperAdmin()) { $this->redirect('/admin/admins/requests'); } $result = $this->userService->approveRequest((int)$id, Auth::id()); Session::setFlash($result['success'] ? 'success' : 'danger', $result['message']); $this->redirect('/admin/admins/requests'); } public function rejectRequest(string $id): void { AdminMiddleware::requirePermission('admin.manage'); if (!AdminMiddleware::isSuperAdmin()) { $this->redirect('/admin/admins/requests'); } $result = $this->userService->rejectRequest((int)$id, Auth::id()); Session::setFlash($result['success'] ? 'success' : 'danger', $result['message']); $this->redirect('/admin/admins/requests'); } // ── Audit Log ──────────────────────────────────────────── public function auditLog(): void { AdminMiddleware::requirePermission('admin.manage'); $filters = [ 'admin_id' => $_GET['admin_id'] ?? '', 'module' => $_GET['module'] ?? '', 'action' => $_GET['action'] ?? '', 'date_from' => $_GET['date_from'] ?? '', 'date_to' => $_GET['date_to'] ?? '', 'result' => $_GET['result'] ?? '', ]; $page = isset($_GET['page']) ? max(1, (int)$_GET['page']) : 1; $perPage = 30; $offset = ($page - 1) * $perPage; $auditModel = new AdminAuditLog(); $logs = $auditModel->getLogs($filters, $perPage, $offset); $total = $auditModel->countLogs($filters); $this->render('admin/audit_log/index', [ 'logs' => $logs, 'total' => $total, 'page' => $page, 'total_pages' => max(1, (int)ceil($total / $perPage)), 'filters' => $filters, 'pageTitle' => 'Admin Audit Log — CARGOO Admin', 'activeNav' => 'audit_log', ], 'admin'); } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings