Do more of the permissions calculation in SQL.
This commit is contained in:
parent
094ed35f52
commit
c777d57373
1 changed files with 3 additions and 48 deletions
|
@ -20,33 +20,6 @@ define('MSZ_PERM_SETS', [
|
||||||
MSZ_PERMS_ALLOW, MSZ_PERMS_DENY
|
MSZ_PERMS_ALLOW, MSZ_PERMS_DENY
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// phpcs:disable
|
|
||||||
$_msz_perms_cache = [];
|
|
||||||
// phpcs:enable
|
|
||||||
|
|
||||||
function perms_construct_cache_key(string $prefix, string $mode, int $pid): string
|
|
||||||
{
|
|
||||||
return $prefix . '_' . $mode . '_' . $pid;
|
|
||||||
}
|
|
||||||
|
|
||||||
function perms_get_cache(string $prefix, string $mode, int $pid): int
|
|
||||||
{
|
|
||||||
global $_msz_perms_cache;
|
|
||||||
return $_msz_perms_cache[perms_construct_cache_key($prefix, $mode, $pid)];
|
|
||||||
}
|
|
||||||
|
|
||||||
function perms_set_cache(string $prefix, string $mode, int $pid, int $perms): int
|
|
||||||
{
|
|
||||||
global $_msz_perms_cache;
|
|
||||||
return $_msz_perms_cache[perms_construct_cache_key($prefix, $mode, $pid)] = $perms;
|
|
||||||
}
|
|
||||||
|
|
||||||
function perms_is_cached(string $prefix, string $mode, int $pid): bool
|
|
||||||
{
|
|
||||||
global $_msz_perms_cache;
|
|
||||||
return array_key_exists(perms_construct_cache_key($prefix, $mode, $pid), $_msz_perms_cache);
|
|
||||||
}
|
|
||||||
|
|
||||||
function perms_get_keys(): array
|
function perms_get_keys(): array
|
||||||
{
|
{
|
||||||
$perms = [];
|
$perms = [];
|
||||||
|
@ -84,15 +57,8 @@ function perms_get_user(string $prefix, int $user): int
|
||||||
return 0x7FFFFFFF;
|
return 0x7FFFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (perms_is_cached($prefix, 'user', $user)) {
|
|
||||||
return perms_get_cache($prefix, 'user', $user);
|
|
||||||
}
|
|
||||||
|
|
||||||
$permsAllow = 0;
|
|
||||||
$permsDeny = 0;
|
|
||||||
|
|
||||||
$getPerms = Database::prepare("
|
$getPerms = Database::prepare("
|
||||||
SELECT `{$prefix}_perms_allow` as `allow`, `{$prefix}_perms_deny` as `deny`
|
SELECT BIT_OR(`{$prefix}_perms_allow`) &~ BIT_OR(`{$prefix}_perms_deny`)
|
||||||
FROM `msz_permissions`
|
FROM `msz_permissions`
|
||||||
WHERE (`user_id` = :user_id_1 AND `role_id` IS NULL)
|
WHERE (`user_id` = :user_id_1 AND `role_id` IS NULL)
|
||||||
OR (
|
OR (
|
||||||
|
@ -106,14 +72,7 @@ function perms_get_user(string $prefix, int $user): int
|
||||||
");
|
");
|
||||||
$getPerms->bindValue('user_id_1', $user);
|
$getPerms->bindValue('user_id_1', $user);
|
||||||
$getPerms->bindValue('user_id_2', $user);
|
$getPerms->bindValue('user_id_2', $user);
|
||||||
$perms = $getPerms->execute() ? $getPerms->fetchAll(PDO::FETCH_ASSOC) : [];
|
return $getPerms->execute() ? (int)$getPerms->fetchColumn() : 0;
|
||||||
|
|
||||||
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
|
function perms_get_role(string $prefix, int $role): int
|
||||||
|
@ -122,10 +81,6 @@ function perms_get_role(string $prefix, int $role): int
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (perms_is_cached($prefix, 'role', $user)) {
|
|
||||||
return perms_get_cache($prefix, 'role', $user);
|
|
||||||
}
|
|
||||||
|
|
||||||
$getPerms = Database::prepare("
|
$getPerms = Database::prepare("
|
||||||
SELECT `{$prefix}_perms_allow` &~ `{$prefix}_perms_deny`
|
SELECT `{$prefix}_perms_allow` &~ `{$prefix}_perms_deny`
|
||||||
FROM `msz_permissions`
|
FROM `msz_permissions`
|
||||||
|
@ -133,7 +88,7 @@ function perms_get_role(string $prefix, int $role): int
|
||||||
AND `user_id` IS NULL
|
AND `user_id` IS NULL
|
||||||
");
|
");
|
||||||
$getPerms->bindValue('role_id', $role);
|
$getPerms->bindValue('role_id', $role);
|
||||||
return perms_set_cache($prefix, 'role', $role, $getPerms->execute() ? (int)$getPerms->fetchColumn() : 0);
|
return $getPerms->execute() ? (int)$getPerms->fetchColumn() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function perms_get_user_raw(int $user): array
|
function perms_get_user_raw(int $user): array
|
||||||
|
|
Loading…
Add table
Reference in a new issue