This commit is contained in:
@@ -9,6 +9,7 @@ import {
|
||||
CreateAdminSshKeyDto,
|
||||
CreateAdminDto,
|
||||
ResetAdminPasswordDto,
|
||||
UpdateAdminAppPermissionsDto,
|
||||
UpdateAdminRoleDto,
|
||||
UpdateAdminStatusDto,
|
||||
} from './dto';
|
||||
@@ -63,6 +64,9 @@ export class AdminsService {
|
||||
orderBy: { createdAt: 'desc' },
|
||||
select: adminSshKeySelect,
|
||||
},
|
||||
appPermissions: {
|
||||
select: { appId: true },
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -132,6 +136,55 @@ export class AdminsService {
|
||||
return { admin };
|
||||
}
|
||||
|
||||
async listAppPermissions(id: string) {
|
||||
await this.ensureExists(id);
|
||||
|
||||
const permissions = await this.prisma.adminAppPermission.findMany({
|
||||
where: { adminId: id },
|
||||
orderBy: { createdAt: 'asc' },
|
||||
select: { appId: true },
|
||||
});
|
||||
|
||||
return { appIds: permissions.map((permission) => permission.appId) };
|
||||
}
|
||||
|
||||
async updateAppPermissions(id: string, body: UpdateAdminAppPermissionsDto) {
|
||||
const admin = await this.prisma.admin.findUnique({
|
||||
where: { id },
|
||||
select: { id: true, role: true },
|
||||
});
|
||||
|
||||
if (!admin) {
|
||||
throw new NotFoundException('관리자를 찾을 수 없습니다.');
|
||||
}
|
||||
|
||||
if (admin.role === AdminRole.OWNER) {
|
||||
throw new BadRequestException('오너 권한은 앱 권한을 개별 설정하지 않습니다.');
|
||||
}
|
||||
|
||||
const appIds = [...new Set(body.appIds.filter(Boolean))];
|
||||
const existingApps = await this.prisma.app.findMany({
|
||||
where: { id: { in: appIds } },
|
||||
select: { id: true },
|
||||
});
|
||||
const existingAppIds = new Set(existingApps.map((app) => app.id));
|
||||
const validAppIds = appIds.filter((appId) => existingAppIds.has(appId));
|
||||
|
||||
await this.prisma.$transaction([
|
||||
this.prisma.adminAppPermission.deleteMany({ where: { adminId: id } }),
|
||||
...(validAppIds.length
|
||||
? [
|
||||
this.prisma.adminAppPermission.createMany({
|
||||
data: validAppIds.map((appId) => ({ adminId: id, appId })),
|
||||
skipDuplicates: true,
|
||||
}),
|
||||
]
|
||||
: []),
|
||||
]);
|
||||
|
||||
return { appIds: validAppIds };
|
||||
}
|
||||
|
||||
async createSshKey(adminId: string, body: CreateAdminSshKeyDto) {
|
||||
await this.ensureExists(adminId);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user