使用 CASL 检查访问会引发错误 - PrismaORM、NestJs、Typescript

问题描述 投票:0回答:1

在中间件中,我设置了一个访问用户的条件,即用户与经过身份验证的用户位于同一公寓中。 这个条件如下: can(DirectoryAction.VIEW, 'DirectoryUser', { 角色: { some: { 角色: { unitId: CASL_ROLE.unitId } } } }); DirectoryAction 是一个包含查看、删除或更新等操作的枚举。 DirectoryUser 是我的用户对象的名称。 CASL_ROLE 是我为经过身份验证的用户角色指定的名称。将unitId视为公寓ID。

编译时没有异常,在工作室代码中检测到打字稿错误。这是一个纯粹的运行时错误: --> “equals”不支持数组和对象的比较

Prisma 模式:

model DirectoryUser {
    id          BigInt   @id @default(autoincrement())
    userName    String   @map("user_name")
    password    String
    roles   DirectoryRoleUserMapping[]

    @@map("directory_users")
}

model DirectoryRoleUserMapping {
    id  BigInt          @id @default(autoincrement())
    roleId  BigInt          @map("role_id")
    role    DirectoryRole   @relation(fields: [roleId], references: [id], onDelete: Cascade, onUpdate: Cascade)
    userId  BigInt      @map("user_id")
    user    DirectoryUser   @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: Cascade)

    @@unique([roleId, userId])
    @@map("directory_role_user_mappings")
}

model DirectoryRole {
    id     BigInt    @id @default(autoincrement())
    name   String
    unitId BigInt?   @map("unit_id")
    unit   BmsUnit?  @relation(fields: [unitId], references: [id], onDelete: Cascade, onUpdate: Cascade)
    rank   BigInt

    users  DirectoryRoleUserMapping[]

    @@unique([name, unitId])
    @@map("directory_roles")
}

将条件更改为不太复杂的条件(仅此处的条件): { 角色:{ 一些:{ roleId:CASL_ROLE.id } } } 不再抛出错误,但条件不再遵循规范。似乎每当我在“some”中设置一个对象而不是一对键:值时,就会出现此错误。例如,这个条件: { 角色:{ 一些:{ 角色:{ id: CASL_ROLE.id } } } } 抛出错误,但条件验证了与之前相同的内容。

如有需要,请询问更多信息!非常感谢您的关注!

typescript nestjs prisma casl
1个回答
0
投票

抱歉耽搁了,这篇文章的答案可以在下面链接的问题中找到。感谢 Stalniy(CASL 的代码所有者)当时的快速回答。

https://github.com/stalniy/casl/issues/779

© www.soinside.com 2019 - 2024. All rights reserved.