自定义的collection,指定permission为:
"permission": {
"read": "(doc.createdBy == auth.uid)",
"create": false,
"update":false,
"delete": false
},
"createdBy": {
"title": "录入者用户ID",
"bsontype": "string",
"forceDefaultValue": {
"$env": "uid"
},
"foreignKey": "uni-id-users._id"
},
希望仅为创建者的用户可以看到自己创建的记录。
但是从模板<unicloud-db></unicloud-db>访问时候,获得错误
00:07:05.856 onDataError(): error = {"code":"PERMISSION_ERROR"}
00:07:05.861 a: 权限校验未通过
如果权限改为
"permission": {
"read": "(xxxx == auth.uid)",
......
}
xxxx为具体的uid
或者
"permission": {
"read": "'XYZ_USER' in auth.role",
......
}
都可以正常读取。
请问这是为什么呢?
我希望最终实现类似这样的效果:
"permission": {
"read": "(('XYZ_USER' in auth.role) && (doc.createdBy == auth.uid))) || (‘XYZ_ADMIN’ in auth.role)",
......
}
就是要求要么有某业务管理员角色就都能看到,要么有该业务的用户角色、且只能访问自己创建的记录。
请问应该怎么写?
白银狮子头 (作者)
谢谢答复!不过——
还是要问清楚这两个问题,请指教
2022-01-21 12:58
DCloud_uniCloud_WYQ
回复 白银狮子头: 你如果用了doc,那么权限校验就跟你传了什么样的where有关,贴出来看一下,另外可以在HBuilderX的JQL管理器里面执行一下你的查询看看,是不是能查到你配置的权限之外的数据
2022-01-21 14:44
白银狮子头 (作者)
回复 DCloud_uniCloud_WYQ: 我特意没有写任何的Where
中间空了 一行,是我把:where给删除了
以前的queryWhere是我在computed 里面定义的:
这段queryWhere()是要被替换掉的,目前在<unicloud-db></unicloud-db>中被删掉了
2022-01-21 15:26
白银狮子头 (作者)
而且我特意使用了导入的uni-id-users这个collection做了实验。这个collection来自UniID,我以前没改过。
我修改了其中的permission中的read,类似
这样的,也是不行的
2022-01-21 15:31
白银狮子头 (作者)
回复 DCloud_uniCloud_WYQ:
JQL查询可以查出所有的数据
比如
uni-id-users 的permission是:
JQL查询是
结果能获得所有的数据,完全没有限制。
2022-01-21 16:45