prepare(" SELECT `{$prefix}_perms_allow` as `allow`, `{$prefix}_perms_deny` as `deny` FROM `msz_permissions` WHERE (`user_id` = :user_id_1 AND `role_id` IS NULL) OR ( `user_id` IS NULL AND `role_id` IN ( SELECT `role_id` FROM `msz_user_roles` WHERE `user_id` = :user_id_2 ) ) "); $getPerms->bindValue('user_id_1', $user); $getPerms->bindValue('user_id_2', $user); $perms = $getPerms->execute() ? $getPerms->fetchAll(PDO::FETCH_ASSOC) : []; foreach ($perms as $perm) { $permsAllow |= $perm['allow']; $permsDeny |= $perm['deny']; } return perms_set_cache($prefix, 'user', $user, $permsAllow &~ $permsDeny); } function perms_get_role(string $prefix, int $role): int { if (!in_array($prefix, MSZ_PERM_MODES) || $role < 1) { return 0; } if (perms_is_cached($prefix, 'role', $user)) { return perms_get_cache($prefix, 'role', $user); } $getPerms = Database::connection()->prepare(" SELECT `{$prefix}_perms_allow` &~ `{$prefix}_perms_deny` FROM `msz_permissions` WHERE `role_id` = :role_id AND `user_id` IS NULL "); $getPerms->bindValue('role_id', $role); return perms_set_cache($prefix, 'role', $role, $getPerms->execute() ? (int)$getPerms->fetchColumn() : 0); } function perms_get_user_raw(int $user): array { $emptyPerms = perms_create(); if ($user < 1) { return $emptyPerms; } $getPerms = Database::connection()->prepare(' SELECT `' . implode('`, `', perms_get_keys()) . '` FROM `msz_permissions` WHERE `user_id` = :user_id AND `role_id` IS NULL '); $getPerms->bindValue('user_id', $user); if (!$getPerms->execute()) { return $emptyPerms; } $perms = $getPerms->fetch(PDO::FETCH_ASSOC); if (!$perms) { return $emptyPerms; } return $perms; } function perms_get_role_raw(int $role): array { $emptyPerms = perms_create(); if ($role < 1) { return $emptyPerms; } $getPerms = Database::connection()->prepare(' SELECT `' . implode('`, `', perms_get_keys()) . '` FROM `msz_permissions` WHERE `user_id` IS NULL AND `role_id` = :role_id '); $getPerms->bindValue('role_id', $role); if (!$getPerms->execute()) { return $emptyPerms; } $perms = $getPerms->fetch(PDO::FETCH_ASSOC); if (!$perms) { return $emptyPerms; } return $perms; } function perms_check(int $perms, int $perm): bool { return ($perms & $perm) > 0; }