dashboard for org

This commit is contained in:
root
2026-01-12 11:58:12 +03:00
parent d27f66953c
commit 246ca93307
30 changed files with 4362 additions and 125 deletions
+1
View File
@@ -35,6 +35,7 @@ class Filters extends BaseFilters
'pagecache' => PageCache::class,
'performance' => PerformanceMetrics::class,
'org' => \App\Filters\OrganizationFilter::class,
'role' => \App\Filters\RoleFilter::class,
];
/**
+21 -3
View File
@@ -17,9 +17,18 @@ $routes->get('auth/verify/(:any)', 'Auth::verify/$1');
$routes->get('auth/resend-verification', 'Auth::resendVerification');
$routes->post('auth/resend-verification', 'Auth::resendVerification');
# Маршруты для приглашений (публичные, без фильтра org)
$routes->group('invitation', static function ($routes) {
$routes->get('accept/(:any)', 'InvitationController::accept/$1');
$routes->post('accept/(:any)', 'InvitationController::processAccept');
$routes->post('decline/(:any)', 'InvitationController::decline/$1');
$routes->match(['GET', 'POST'], 'complete/(:any)', 'InvitationController::complete/$1');
});
# Защищённые маршруты (с фильтром org)
$routes->group('', ['filter' => 'org'], static function ($routes) {
$routes->get('organizations', 'Organizations::index');
$routes->get('organizations/(:num)/dashboard', 'Organizations::dashboard/$1');
$routes->get('organizations/create', 'Organizations::create');
$routes->post('organizations/create', 'Organizations::create');
$routes->get('organizations/edit/(:num)', 'Organizations::edit/$1');
@@ -28,9 +37,18 @@ $routes->group('', ['filter' => 'org'], static function ($routes) {
$routes->post('organizations/delete/(:num)', 'Organizations::delete/$1');
$routes->get('organizations/switch/(:num)', 'Organizations::switch/$1');
# Управление пользователями организации
$routes->get('organizations/(:num)/users', 'Organizations::users/$1');
$routes->get('organizations/(:num)/users/table', 'Organizations::usersTable/$1');
$routes->post('organizations/(:num)/users/invite', 'Organizations::inviteUser/$1');
$routes->post('organizations/(:num)/users/role', 'Organizations::updateUserRole/$1');
$routes->post('organizations/(:num)/users/(:num)/block', 'Organizations::blockUser/$1/$2');
$routes->post('organizations/(:num)/users/(:num)/unblock', 'Organizations::unblockUser/$1/$2');
$routes->post('organizations/(:num)/users/(:num)/remove', 'Organizations::removeUser/$1/$2');
$routes->post('organizations/(:num)/users/leave', 'Organizations::leaveOrganization/$1');
$routes->post('organizations/(:num)/users/(:num)/resend', 'Organizations::resendInvite/$1/$2');
$routes->post('organizations/(:num)/users/(:num)/cancel', 'Organizations::cancelInvite/$1/$2');
});
# Подключение роутов модулей
require_once APPPATH . 'Modules/Clients/Config/Routes.php';
require_once APPPATH . 'Modules/Clients/Config/Routes.php';
+35
View File
@@ -29,4 +29,39 @@ class Services extends BaseService
* return new \CodeIgniter\Example();
* }
*/
/**
* Сервис для проверки прав доступа (RBAC)
*
* @param bool $getShared
* @return \App\Services\AccessService
*/
public static function access(bool $getShared = true)
{
if ($getShared) {
return static::getSharedInstance('access');
}
return new \App\Services\AccessService();
}
/**
* Сервис для rate limiting
*
* @param bool $getShared
* @return \App\Services\RateLimitService|null
*/
public static function rateLimit(bool $getShared = true)
{
if ($getShared) {
return static::getSharedInstance('rateLimit');
}
try {
return \App\Services\RateLimitService::getInstance();
} catch (\Exception $e) {
log_message('warning', 'RateLimitService unavailable: ' . $e->getMessage());
return null;
}
}
}