EMAS serverless的云数据库自定义权限中,如何设置指定字段来允许数据库的读写操作?
{
".write": "request.auth.userId==resource.auth.userId",
".read": "request.auth.userId==resource.auth.userId"
}
这个是通过阿里用户的userId来控制创建者读写,因为我是从微信云开发搬过来的只有openid来控制创建者读写。
我的数据库结构为:
{
".write": "request.auth.oAuthUserId==resource._openid",
".read": "request.auth.oAuthUserId==resource._openid"
}
{
".write": "request.oAuthUserId==resource._openid",
".read": "request.oAuthUserId==resource._openid"
}
{
".write": "request._openid==resource._openid",
".read": "request._openid==resource._openid"
}
{
".write": "request.auth.oAuthUserId==resource.auth.oAuthUserId",
".read": "request.auth.oAuthUserId==resource.auth.oAuthUserId"
} // 这样也报错,是不是只支持userId?
我在小程序端访问会报错?是不是只支持userId来控制读写?
mpserverless.db.collection('User').findOne().then(result => {
console.log('user', result)
})
开发者您好,感谢您对EMAS Serverless的关注。云数据库表的权限管理请参考文档 https://help.aliyun.com/document_detail/435847.html
例如我有一张用户表 users,权限如下:
{
".read": "request.auth.userId==resource.auth.userId",
".write": "request.auth.userId==resource.auth.userId"
}
此时用户A通过小程序sdk在表中插入一条数据:
serverless.db.collection("users").insertOne({
name: "张三",
age: 18
})
你将会在控制台看到一个插入了userid的数据:
{
"_id": "xxxx",
"name": "张三",
"age": 18,
"auth": {"userId": "xxxxA"}
}
其中auth字段中的userid是系统为每个小程序用户生成的固定不变的值(前提是在控制台配置了第三方小程序秘钥鉴权)。那么这个数据将只允许用户A从客户端读写,如果用户B尝试去读写该条数据则不生效。
权限的取值只有三种情况:
为了数据安全性,一般不建议直接从客户端读写数据库,而是在云函数中读写数据库,此时操作数据不受权限约束。在云函数中可以通过api getinfo https://help.aliyun.com/document_detail/435928.html 来获取当前客户端用户信息,自行在云函数中实现相应的业务权限逻辑。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。