Add role and permission management functionality
Introduce classes `groups_o` and `groups_permissions_o` for managing roles and permissions. Add new routes `rolesRoute` and `permissionsRoute` to handle role and permission-related operations. Enhance `users_o` with the `getGroup` method and update `db_object_t` for improved table handling and pagination support.
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
namespace routes;
|
||||
|
||||
use classes\authentication;
|
||||
use objects\groups_o;
|
||||
use objects\logs_o;
|
||||
use traits\route_t;
|
||||
|
||||
class rolesRoute
|
||||
{
|
||||
use route_t;
|
||||
|
||||
public function run(): void
|
||||
{
|
||||
self::get('/roles', function () {
|
||||
// Require the user to be logged in
|
||||
global $response;
|
||||
self::requirePermission('list_roles');
|
||||
$user = (new authentication())->get_user();
|
||||
if ($user) {
|
||||
(new logs_o())->add('roles', 'global', 1, 0, 'ROLES', 'User accessed the roles list');
|
||||
$groups = new groups_o();
|
||||
$response->success($groups->listObjectsWithPaginationIfSet(
|
||||
function ($group) {
|
||||
return [
|
||||
'id' => (int)$group['id'],
|
||||
'name' => (string)$group['name'],
|
||||
'description' => (string)$group['description'],
|
||||
'created_at' => (string)$group['created_at']
|
||||
];
|
||||
}
|
||||
));
|
||||
} else {
|
||||
(new logs_o())->add('roles', 'global', 0, 0, 'ROLES', 'User tried to access the roles list without a valid session');
|
||||
$response->error('Invalid session', 400);
|
||||
}
|
||||
},
|
||||
[
|
||||
'list_roles' => 'List all roles'
|
||||
]
|
||||
);
|
||||
|
||||
self::post('/roles', function () {
|
||||
// Require the user to be logged in
|
||||
global $response;
|
||||
self::requirePermission('add_role');
|
||||
$user = (new authentication())->get_user();
|
||||
if ($user) {
|
||||
(new logs_o())->add('roles', 'global', 1, 0, 'ROLES', 'User added a role');
|
||||
self::requireParameters(['name', 'description']);
|
||||
self::requireType((string)self::getParameter('name'), 'string');
|
||||
self::requireType((string)self::getParameter('description'), 'string');
|
||||
$group = new groups_o();
|
||||
$group->add(
|
||||
(string)self::getParameter('name'),
|
||||
(string)self::getParameter('description')
|
||||
);
|
||||
$response->success($group->asArray());
|
||||
} else {
|
||||
(new logs_o())->add('roles', 'global', 0, 0, 'ROLES', 'User tried to add a role without a valid session');
|
||||
$response->error('Invalid session', 400);
|
||||
}
|
||||
},
|
||||
[
|
||||
'add_role' => 'Add a role'
|
||||
]
|
||||
);
|
||||
|
||||
self::put('/roles', function () {
|
||||
// Require the user to be logged in
|
||||
global $response;
|
||||
self::requirePermission('edit_role');
|
||||
$user = (new authentication())->get_user();
|
||||
if ($user) {
|
||||
self::requireParameters(['id']);
|
||||
self::requireType((int)self::getParameter('id'), self::type_int());
|
||||
$group = new groups_o();
|
||||
$group->select((int)self::getParameter('id'));
|
||||
$group->requireSelected();
|
||||
// Check which parameters are set and update them
|
||||
if (self::isParametersSet(['name'])) {
|
||||
$group->name->set((string)self::getParameter('name'));
|
||||
}
|
||||
if (self::isParametersSet(['description'])) {
|
||||
$group->description->set((string)self::getParameter('description'));
|
||||
}
|
||||
(new logs_o())->add('roles', 'global', 1, $user->id, 'ROLES', 'User edited a role');
|
||||
$response->success($group->asArray());
|
||||
} else {
|
||||
(new logs_o())->add('roles', 'global', 0, 0, 'ROLES', 'User tried to edit a role without a valid session');
|
||||
$response->error('Invalid session', 400);
|
||||
}
|
||||
},
|
||||
[
|
||||
'edit_role' => 'Edit a role'
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user