Ролевая модель и аудит Часть 2. Финал. #6

This commit is contained in:
2026-04-28 19:38:31 +03:00
parent b2cea7896d
commit 967a024d0c
8 changed files with 326 additions and 18 deletions

View File

@@ -11,6 +11,7 @@ start(_StartType, _StartArgs) ->
ok = infra_mnesia:init_tables(),
ok = infra_mnesia:wait_for_tables(),
connect_nodes(),
init_default_superadmin(),
start_http(), % Пользовательский API (8080)
start_admin_http(), % Административный API (8445)
application:ensure_all_started(prometheus),
@@ -89,7 +90,12 @@ start_admin_http() ->
{"/v1/admin/subscriptions", admin_handler_subscriptions, []},
{"/v1/admin/subscriptions/:id", admin_handler_subscriptions, []},
% ================== МОДЕРАЦИЯ (общий маршрут) ==================
{"/v1/admin/:target_type/:id", admin_handler_moderation, []}
{"/v1/admin/:target_type/:id", admin_handler_moderation, []},
% ================== Управление ролями (только для superadmin) ==================
{"/v1/admin/me", admin_handler_me, []},
{"/v1/admin/admins", admin_handler_admins, []},
{"/v1/admin/admins/:id", admin_handler_admins, []},
{"/v1/admin/audit", admin_handler_audit, []}
]}
]),
@@ -123,4 +129,19 @@ connect_nodes() ->
ignored -> ok
end
end, Nodes)
end.
init_default_superadmin() ->
case core_admin:list_all() of
[] ->
AdminEmail = os:getenv("ADMIN_EMAIL", "admin@eventhub.local"),
AdminPassword = os:getenv("ADMIN_PASSWORD", "123456"),
{ok, _Admin} = core_admin:create(
list_to_binary(AdminEmail),
list_to_binary(AdminPassword),
superadmin
),
io:format("Default superadmin created: ~s~n", [AdminEmail]);
_ ->
io:format("Superadmin already exists. Skipping creation.~n")
end.