云引擎(LeanEngine)提供给开发者自定义云端逻辑的接口,例如开发者想记录每一个用户登录系统的时间,打印一下日志,以备之后的查询和分析,那么云引擎提供的接口就可以实现这一需求,详细的操作请查看:
提到以上这个需求是为了让开发者更好地理解以下的需求描述:
假如开发者的应用有 iOS、Android、Web(JavaScript)各种版本,针对权限管理的逻辑代码会遍布各个客户端,开发者会重复书写逻辑极其类似的代码,只不过是不同语言的版本而已。因此,假如有一个云端的接口,让开发者可以在创建对象或者更新对象的时候,为其添加 ACL 相关的代码,那么各个客户端就无需再重复编码。
我们从一个简单的实例入手:
我们希望每发一篇帖子,不管是从 iOS 还是 Android,还是任意客户端发出的,都希望管理员具备对它读写的权限。
第一步,我们需要编写我们的云引擎 Hook 函数(关于云引擎 Hook 函数介绍请查看 Save AVObject 前执行操作):
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.'); } });
@engine.before_save('Post') def before_post_save(post): acl = leancloud.ACL() acl.set_public_read_access(True) # 假定已经存在一个 `admin` 角色 admin = leancloud.Role('admin') acl.set_role_write_access(admin, True) post.set_acl(acl)
Cloud::beforeSave("Post", function($post, $user) { $acl = new ACL(); $acl->setPublicReadAccess(true); // 假定已经存在一个 `admin` 角色 $acl->setRoleWriteAccess("admin", true); $post->setACL($acl); });
@EngineHook(className = "Post", type = EngineHookType.beforeSave) public static AVObject postBeforeSaveHook(AVObject post) throws Exception { AVACL acl = new AVACL(); acl.setPublicReadAccess(true); // 假定已经存在一个 `admin` 角色 acl.setRoleWriteAccess("admin", true); post.setACL(acl); return post; }
部署代码到云端(如何部署)后,每个在客户端创建的帖子,保存后会自动添加如下的 ACL:
{"*":{"read":true},"role:admin":{"write":true}}
在云引擎中使用 ACL
云引擎(LeanEngine)提供给开发者自定义云端逻辑的接口,例如开发者想记录每一个用户登录系统的时间,打印一下日志,以备之后的查询和分析,那么云引擎提供的接口就可以实现这一需求,详细的操作请查看:
提到以上这个需求是为了让开发者更好地理解以下的需求描述:
假如开发者的应用有 iOS、Android、Web(JavaScript)各种版本,针对权限管理的逻辑代码会遍布各个客户端,开发者会重复书写逻辑极其类似的代码,只不过是不同语言的版本而已。因此,假如有一个云端的接口,让开发者可以在创建对象或者更新对象的时候,为其添加 ACL 相关的代码,那么各个客户端就无需再重复编码。
我们从一个简单的实例入手:
我们希望每发一篇帖子,不管是从 iOS 还是 Android,还是任意客户端发出的,都希望管理员具备对它读写的权限。
第一步,我们需要编写我们的云引擎 Hook 函数(关于云引擎 Hook 函数介绍请查看 Save AVObject 前执行操作):
部署代码到云端(如何部署)后,每个在客户端创建的帖子,保存后会自动添加如下的 ACL: