我的Prisma模式是这样的:


model Permission {
  id    String            @id @default(cuid())
  name  String
  roles RolePermissions[]
}

model Role {
  id          String            @id @default(cuid())
  name        String
  permissions RolePermissions[]
  users       UserRoles[]
}

model User {
  id            String      @id @default(cuid())
  name          String?
  email         String?     @unique
  emailVerified DateTime?
  image         String?
  roles         UserRoles[]
}

model UserRoles {
  user       User     @relation(fields: [userId], references: [id])
  userId     String
  role       Role     @relation(fields: [roleId], references: [id])
  roleId     String
  assignedAt DateTime @default(now())
  assignedBy String?

  @@id([userId, roleId])
}

model RolePermissions {
  role         Role       @relation(fields: [roleId], references: [id])
  roleId       String
  permission   Permission @relation(fields: [permissionId], references: [id])
  permissionId String
  assignedAt   DateTime   @default(now())
  assignedBy   String?

  @@id([roleId, permissionId])
}

因此,每个用户可以有多个角色,每个角色可以有多个权限,正如您所理解的,这意味着每个用户都有多个权限.

My goal是根据用户分配给哪些角色来 Select 用户的权限.

问题是,我不知道该怎么做:

我知道,我可以通过以下方式 Select 用户角色

 const res  = await prisma.user.findFirst(
        {
            include: {
                roles: true
            }
        }
    )

因此,它将为我提供用户角色,但我需要获得每个用户角色的权限.

我想我可以这样做

 const res  = await prisma.user.findFirst(
        {
            include: {
                roles: {
                    include: {
                        permissions: true
                    }
                }
            }
        }
    )

但这给了我一个错误:

enter image description here

那么,我如何从用户的角色中获取用户的权限呢?

推荐答案

就像错误所说的(尽管不是很清楚)permissions不存在于UserRoles表中.在Role桌.你需要三个层次的深度.

const res  = await prisma.user.findFirst(
  {
    include: {
      roles: {
        include: {
          role: {
            include: {
              permissions: true
            }
          }
        }
      }
    }
  }
)

我不确定我的语法是否正确,但您明白了.

Javascript相关问答推荐

用户单击仅在JavaScript中传递一次以及其他行为

为什么使用MAX_SAFE_INTEGER生成随机整数时数字分布不准确?

将字符串UTC Date转换为ngx—counting leftTime配置值的数字

JSDoc创建并从另一个文件导入类型

在JS中拖放:检测文件

如何在coCos2d-x中更正此错误

扩展类型的联合被解析为基类型

Use Location位置成员在HashRouter内为空

为什么可选参数的顺序会导致问题?

Phaserjs-创建带有层纹理的精灵层以自定义外观

使每个<;li>;元素的 colored颜色 与随机生成的 colored颜色 列表不同(不重复

Docent.cloneNode(TRUE)不克隆用户输入

重新呈现-react -筛选数据过多

为什么我不能使用其同级元素调用和更新子元素?

如果对象中的字段等于某个值,则从数组列表中删除对象

正则表达式以确定给定文本是否不只包含邮箱字符串

在此div中添加一个类,并在一段时间后在Java脚本中将其删除

如何在不将整个文件加载到内存的情况下,在Node.js中实现Unix粘贴命令?

我想为我的Reaction项目在画布上加载图像/视频,图像正在工作,但视频没有

将匿名函数附加到链接的onClick属性