File manager - Edit - /home/webapp69.cm.in.th/u69319090028/Shop/app/Services/AdminPermissionService.php
Back
<?php /** * AdminPermissionService * Resolves effective permissions for an admin user. * Merges role-default set with database permissions from admin_permissions table. */ require_once __DIR__ . '/../Models/AdminPermission.php'; require_once __DIR__ . '/../Models/User.php'; class AdminPermissionService { private AdminPermission $permModel; private User $userModel; private static array $resolvedCache = []; public function __construct() { $this->permModel = new AdminPermission(); $this->userModel = new User(); } /** * Get the full resolved permission set for an admin user. * Merges role defaults with database role permissions. * Returns array of permission keys the admin has. */ public function getEffectivePermissions(int $adminId): array { if (isset(self::$resolvedCache[$adminId])) { return self::$resolvedCache[$adminId]; } // Get admin user info and roles $user = $this->userModel->findById($adminId); $roles = $this->userModel->getUserRoles($adminId); $defaults = []; // 1. Super admin has all permissions if (!empty($user['is_super_admin'])) { foreach (self::allPermissionKeys() as $key) { $defaults[$key] = true; } } // 2. Collect default permissions from assigned roles foreach ($roles as $role) { $rolePerms = AdminPermission::$roleDefaults[$role] ?? []; foreach ($rolePerms as $perm) { $defaults[$perm] = true; } } // 3. Collect active permissions from admin_permissions database table $dbRolePerms = $this->permModel->getPermissionsForRoles($roles); foreach ($dbRolePerms as $permKey => $granted) { $defaults[$permKey] = $granted; } // Return only granted keys $effective = array_keys(array_filter($defaults)); self::$resolvedCache[$adminId] = $effective; return $effective; } /** * Check if admin has a specific permission */ public function can(int $adminId, string $permissionKey): bool { return in_array($permissionKey, $this->getEffectivePermissions($adminId), true); } /** * Alias for can() method */ public function has(int $adminId, string $permissionKey): bool { return $this->can($adminId, $permissionKey); } /** * Check permission and abort with 403 if denied */ public function requirePermission(int $adminId, string $permissionKey): void { if (!$this->can($adminId, $permissionKey)) { http_response_code(403); exit('ไม่มีสิทธิ์ดำเนินการนี้ (Permission Denied: ' . htmlspecialchars($permissionKey) . ')'); } } /** * Grant or revoke a permission for an admin user */ public function setPermission(int $adminId, string $key, bool $granted, int $grantedBy): void { $this->permModel->setPermission($adminId, $key, $granted, $grantedBy); unset(self::$resolvedCache[$adminId]); } /** * All known permission keys */ public static function allPermissionKeys(): array { $all = []; foreach (AdminPermission::$roleDefaults as $perms) { foreach ($perms as $p) { $all[$p] = true; } } return array_keys($all); } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings