mongodb Prisma结果处理为单个对象

gmxoilav  于 2022-12-12  发布在  Go
关注(0)|答案(1)|浏览(149)

我正在用MongoDB和prisma ORM做一个nextjs 13项目。目前我正在尝试获取具有管理角色矩阵权限的角色。这是角色模型模式。

model Role {
  id          String   @id @default(auto()) @map("_id") @db.ObjectId
  name        String   @unique
  userIDs     String[] @db.ObjectId
  users       User[]   @relation(fields: [userIDs], references: [id])
  permissions String[]

  @@map("roles")
}

在提取记录时,我想对它们进行一些处理。运行此查询将返回这样的结果。
第一次
我需要一个对象中的结果,该对象的权限前面带有角色名称,如下所示

{
    'User.permissions.user.view.dashboard',
    'Admin.permissions.user.view.dashboard',
    'Admin.permissions.admin.view.dashboard'
}

所以我的问题是我该怎么做呢?最好直接用prisma,但如果不可能的话,javascript也可以。

pu82cl6c

pu82cl6c1#

无法在Prisma层级直接变换此对象。您可以通过以下方式实现此变换:

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  const roles = await prisma.role.findMany({
    select: {
      name: true,
      permissions: true,
    },
  });
  console.log(roles);

  const updatedRoles = [];

  roles.forEach((role) => {
    role.permissions.forEach((permission) => {
      updatedRoles.push(`${role.name}.${permission}`);
    });
  });

  console.log(updatedRoles);
}

main()
  .catch((e) => {
    throw e;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

以下是示例响应:

相关问题