數據表
users: id, username, password, role_id
roles: id, name (super_admin, admin, user)
permissions: id, name, route (如 'article.delete')
role_permissions: role_id, permission_id
中間件/檢查函數
function hasPermission($userId, $permissionName) {
$sql = "SELECT 1 FROM role_permissions rp
JOIN permissions p ON rp.permission_id = p.id
JOIN users u ON u.role_id = rp.role_id
WHERE u.id = ? AND p.name = ?";
return (bool)db_fetch_one($sql, [$userId, $permissionName]);
}
// 控制器使用
if (!hasPermission($_SESSION['uid'], 'article.delete')) {
exit('權限不足');
}
超管繞過
if ($_SESSION['role'] === 'super_admin') return true; // 直接放行
參考