在中间件中,我设置了一个访问用户的条件,即用户与经过身份验证的用户位于同一公寓中。 这个条件如下: 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 } } } } 抛出错误,但条件验证了与之前相同的内容。
如有需要,请询问更多信息!非常感谢您的关注!
抱歉耽搁了,这篇文章的答案可以在下面链接的问题中找到。感谢 Stalniy(CASL 的代码所有者)当时的快速回答。