跳到主要内容

在云引擎中使用 ACL

云引擎 提供给开发者自定义云端逻辑的接口,例如开发者想记录每一个用户登录系统的时间,打印一下日志,以备之后的查询和分析,那么云引擎提供的接口就可以实现这一需求,详细的操作请查看 云函数和 Hook 文档。

需求

提到以上这个需求是为了让开发者更好地理解以下的需求描述:

假如开发者的应用有 iOS、Android、Web(JavaScript)各种版本,针对权限管理的逻辑代码会遍布各个客户端,开发者会重复书写逻辑极其类似的代码,只不过是不同语言的版本而已。因此,假如有一个云端的接口,让开发者可以在创建对象或者更新对象的时候,为其添加 ACL 相关的代码,那么各个客户端就无需再重复编码。

示例

我们从一个简单的实例入手:

我们希望每发一篇帖子,不管是从 iOS 还是 Android,还是任意客户端发出的,都希望管理员具备对它读写的权限。

第一步,我们需要编写我们的云引擎 Hook 函数(关于云引擎 Hook 函数介绍请查看 Save 前执行操作):

AV.Cloud.beforeSave('Post', (request) => {
const post = request.object;
if (post) {
var acl = new AV.ACL();
acl.setPublicReadAccess(true);
// 假定已经存在一个 `admin` 角色
acl.setRoleWriteAccess('admin', true);
post.setACL(acl);
} else {
throw new AV.Cloud.Error('Invalid Post object.');
}
});

部署代码到云端后,每个在客户端创建的帖子,保存后会自动添加如下的 ACL:

{"*":{"read":true},"role:admin":{"write":true}}