fix sso core folder

This commit is contained in:
lendry
2026-06-24 14:45:45 +03:00
parent 995adeedd4
commit d2bbf35d40
45 changed files with 6592 additions and 1 deletions

View File

@@ -0,0 +1,93 @@
import { Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaService } from '../infra/prisma.service';
import { RbacService } from './rbac.service';
const PERMISSIONS = [
{ slug: 'admin.access', name: 'Доступ к админ-панели', description: 'Позволяет открывать раздел администрирования' },
{ slug: 'oauth.manage', name: 'Управление OAuth-приложениями', description: 'Создание и редактирование OAuth2-клиентов' },
{ slug: 'users.manage', name: 'Управление пользователями', description: 'Редактирование, блокировка и сброс паролей' },
{ slug: 'users.read', name: 'Просмотр пользователей', description: 'Чтение списка пользователей без изменений' },
{ slug: 'settings.manage', name: 'Управление настройками', description: 'Изменение глобальных SystemSetting' },
{ slug: 'rbac.manage', name: 'Управление ролями', description: 'Назначение ролей и прав (только супер-админ)' },
{ slug: 'documents.view_others', name: 'Просмотр документов пользователей', description: 'Просмотр документов и фото других пользователей' }
] as const;
const ROLES = [
{
slug: 'admin',
name: 'Администратор',
description: 'Полный доступ к админ-панели без назначения ролей',
permissions: ['admin.access', 'oauth.manage', 'users.manage', 'settings.manage']
},
{
slug: 'moderator',
name: 'Модератор',
description: 'Просмотр пользователей и базовый доступ к админке',
permissions: ['admin.access', 'users.read']
},
{
slug: 'manager',
name: 'Менеджер',
description: 'Управление OAuth-приложениями',
permissions: ['admin.access', 'oauth.manage']
}
] as const;
const OAUTH_SCOPES = [
{ slug: 'openid', name: 'OpenID', description: 'Базовая идентификация OpenID Connect' },
{ slug: 'profile', name: 'Профиль', description: 'Имя, логин и аватар пользователя' },
{ slug: 'email', name: 'Email', description: 'Основная и резервная почта' },
{ slug: 'phone', name: 'Телефон', description: 'Основной и резервный телефон' },
{ slug: 'address', name: 'Адреса', description: 'Адреса пользователя' },
{ slug: 'documents', name: 'Документы', description: 'Документы пользователя' }
] as const;
@Injectable()
export class AdminSeedService implements OnModuleInit {
constructor(
private readonly prisma: PrismaService,
private readonly rbac: RbacService
) {}
async onModuleInit() {
for (const permission of PERMISSIONS) {
await this.rbac.upsertPermission(permission);
}
for (const scope of OAUTH_SCOPES) {
await this.prisma.oAuthScope.upsert({
where: { slug: scope.slug },
create: scope,
update: { name: scope.name, description: scope.description }
});
}
for (const role of ROLES) {
const existing = await this.prisma.role.findUnique({ where: { slug: role.slug } });
const roleRecord =
existing ??
(await this.prisma.role.create({
data: {
slug: role.slug,
name: role.name,
description: role.description
}
}));
await this.prisma.role.update({
where: { id: roleRecord.id },
data: { name: role.name, description: role.description }
});
for (const slug of role.permissions) {
const permission = await this.prisma.permission.findUnique({ where: { slug } });
if (!permission) continue;
await this.prisma.rolePermission.upsert({
where: { roleId_permissionId: { roleId: roleRecord.id, permissionId: permission.id } },
create: { roleId: roleRecord.id, permissionId: permission.id },
update: {}
});
}
}
}
}