仅使用 prisma 和 nexus 检索所有者数据的可能性
Possibility to only retreive owners data with prisma2 and nexus
发布查询时,我只想检索分配给当前用户 (id) 的数据。
我使用包含的中间件函数检索并设置 userId
;
const userId = tokenPayload['claims']['uid'];
ctx.userId = userId;
基于 userId
我需要从这样的模型中过滤数据;
model Address {
id String @id @default(uuid())
name string
...
user User
}
所以我想 return 相当于 Addresses.filter(address => address.user.id === ctx.userId)
(Addresses
其中user.id
等于中间件中设置的那个)
例如像这样的东西(这是编造的代码所以它确实有效)
plugins: [nexusPrismaPlugin(
{
computedInputs: {
...
},
computedFilters: {
addresses: ({ ctx }) => ({ where: { user: { id: ctx.userId } } }),
relations: ({ ctx }) => ({ where: { user: { id: ctx.userId } } }),
...
}
}
)],
其中 computedFilters
过滤传入查询以匹配 where
语句中设置的要求。
所以对于这个集合,它应该只有 return adresses
和/或 relations
其中 user.id === ctx.userId
。
我希望很清楚我想要实现的目标,它不必像这样,唯一需要相同的是以最高效的方式响应。
我希望有人能提供帮助,过去几周我一直在为当前的问题而苦苦挣扎..
我通过编辑生成的解析器解决了这个问题;
替换
t.crud.addresses({filtering: true, ordering: true});
和
t.list.field('addresses', {
type: 'Address',
resolve: (_parent, _args, ctx) => {
return ctx.prisma.address.findMany({
where: {
user: {
id: ctx.userId
}
}
})
}
});
发布查询时,我只想检索分配给当前用户 (id) 的数据。
我使用包含的中间件函数检索并设置 userId
;
const userId = tokenPayload['claims']['uid'];
ctx.userId = userId;
基于 userId
我需要从这样的模型中过滤数据;
model Address {
id String @id @default(uuid())
name string
...
user User
}
所以我想 return 相当于 Addresses.filter(address => address.user.id === ctx.userId)
(Addresses
其中user.id
等于中间件中设置的那个)
例如像这样的东西(这是编造的代码所以它确实有效)
plugins: [nexusPrismaPlugin(
{
computedInputs: {
...
},
computedFilters: {
addresses: ({ ctx }) => ({ where: { user: { id: ctx.userId } } }),
relations: ({ ctx }) => ({ where: { user: { id: ctx.userId } } }),
...
}
}
)],
其中 computedFilters
过滤传入查询以匹配 where
语句中设置的要求。
所以对于这个集合,它应该只有 return adresses
和/或 relations
其中 user.id === ctx.userId
。
我希望很清楚我想要实现的目标,它不必像这样,唯一需要相同的是以最高效的方式响应。
我希望有人能提供帮助,过去几周我一直在为当前的问题而苦苦挣扎..
我通过编辑生成的解析器解决了这个问题;
替换
t.crud.addresses({filtering: true, ordering: true});
和
t.list.field('addresses', {
type: 'Address',
resolve: (_parent, _args, ctx) => {
return ctx.prisma.address.findMany({
where: {
user: {
id: ctx.userId
}
}
})
}
});