Improved loadDefaultACL

This commit is contained in:
Roman 2024-12-27 13:32:12 +01:00
parent 771fc8675f
commit f7d11c297d
3 changed files with 32 additions and 9 deletions

@ -3,6 +3,7 @@
namespace Core\API; namespace Core\API;
use Core\Driver\Logger\Logger; use Core\Driver\Logger\Logger;
use Core\Driver\SQL\Query\Insert;
use Core\Objects\Context; use Core\Objects\Context;
use Core\Objects\DatabaseEntity\TwoFactorToken; use Core\Objects\DatabaseEntity\TwoFactorToken;
use Core\Objects\RateLimiting; use Core\Objects\RateLimiting;
@ -134,6 +135,7 @@ abstract class Request {
protected abstract function _execute(): bool; protected abstract function _execute(): bool;
public static abstract function getDescription(): string; public static abstract function getDescription(): string;
public static function getDefaultPermittedGroups(): array { public static function getDefaultPermittedGroups(): array {
return []; return [];
} }
@ -629,4 +631,14 @@ abstract class Request {
return "the next $count {$string}s"; return "the next $count {$string}s";
} }
} }
public static function loadDefaultACL(Insert $query): void {
if (static::hasConfigurablePermissions()) {
$method = static::getEndpoint();
$groups = static::getDefaultPermittedGroups();
$description = static::getDescription();
$isCore = startsWith(get_class(), "Core\\API\\");
$query->addRow($method, $groups, $description, $isCore);
}
}
} }

@ -161,18 +161,23 @@ class CreateDatabase {
self::createEntityQueries($sql, $classes, $queries); self::createEntityQueries($sql, $classes, $queries);
} }
public static function loadDefaultACL(SQL $sql, array &$queries): void { public static function loadDefaultACL(SQL $sql, array &$queries, ?array $classes = NULL): void {
$query = $sql->insert("ApiPermission", ["method", "groups", "description", "is_core"]); $query = $sql->insert("ApiPermission", ["method", "groups", "description", "is_core"]);
foreach (Request::getApiEndpoints() as $reflectionClass) { if ($classes === NULL) {
$className = $reflectionClass->getName(); $classes = Request::getApiEndpoints();
if (("$className::hasConfigurablePermissions")()) { }
$method = ("$className::getEndpoint")();
$groups = ("$className::getDefaultPermittedGroups")(); foreach ($classes as $class) {
$description = ("$className::getDescription")(); if ($class instanceof \ReflectionClass) {
$isCore = startsWith($className, "Core\\API\\"); $className = $class->getName();
$query->addRow($method, $groups, $description, $isCore); } else if (!is_string($class)) {
throw new \Exception("Cannot call loadDefaultACL() for type: " . get_class($class));
} else {
$className = $class;
} }
("$className::loadDefaultACL")($query);
} }
if ($query->hasRows()) { if ($query->hasRows()) {

@ -1,5 +1,6 @@
<?php <?php
use Core\Configuration\CreateDatabase;
use Core\Driver\SQL\Column\DateTimeColumn; use Core\Driver\SQL\Column\DateTimeColumn;
use Core\Driver\SQL\Expression\CurrentTimeStamp; use Core\Driver\SQL\Expression\CurrentTimeStamp;
use Core\Objects\DatabaseEntity\Session; use Core\Objects\DatabaseEntity\Session;
@ -7,3 +8,8 @@ use Core\Objects\DatabaseEntity\Session;
$handler = Session::getHandler($sql); $handler = Session::getHandler($sql);
$queries[] = $sql->alterTable($handler->getTableName()) $queries[] = $sql->alterTable($handler->getTableName())
->add(new DateTimeColumn($handler->getColumnName("lastOnline"), false, new CurrentTimeStamp())); ->add(new DateTimeColumn($handler->getColumnName("lastOnline"), false, new CurrentTimeStamp()));
CreateDatabase::loadDefaultACL($sql, $queries, [
\Core\API\User\GetSessions::class,
\Core\API\User\DestroySession::class
]);