如何使用Prisma查询用户关联角色的关联权限数据?
解决用户权限查询问题
你的报错原因是:User模型中的roles字段对应的是连接表UserRoles的数组,而非直接的Role模型数组。所以你不能直接在roles里嵌套include: { permissions: true },因为UserRoles没有permissions字段。
正确的嵌套查询写法
需要逐层关联查询:从User到UserRoles,再到Role,接着到RolePermissions,最后关联到Permission模型:
const res = await prisma.user.findFirst({ include: { // 先包含用户的UserRoles连接记录 roles: { // 从UserRoles关联到对应的Role include: { role: { // 从Role关联到RolePermissions连接记录 include: { permissions: { // 最后从RolePermissions关联到具体的Permission include: { permission: true } } } } } } } });
提取扁平化的权限列表(可选)
如果需要直接得到该用户的所有权限(自动去重),可以在查询后处理结果:
// 提取所有权限数据 const allPermissions = res.roles.flatMap(userRole => userRole.role.permissions.flatMap(rolePerm => rolePerm.permission) ); // 根据权限ID去重 const uniquePermissions = [...new Map(allPermissions.map(p => [p.id, p])).values()];
精简查询结果(用select过滤冗余字段)
如果不需要连接表的额外字段(比如assignedAt、assignedBy),可以用select精简返回内容:
const res = await prisma.user.findFirst({ select: { id: true, name: true, roles: { select: { role: { select: { name: true, permissions: { select: { permission: { select: { id: true, name: true } } } } } } } } } });
内容的提问来源于stack exchange,提问作者artur1214
相关产品推荐
相关产品推荐

