隐含的意思是考虑到用户所在的角色,让我获得该用户对该对象的写访问权限,而我的方法效率低下,我认为:
- 云代码功能用于查询用户的角色,然后检查用户或他的角色是否有权访问该对象。
Parse.Cloud.define("hasWriteAccess", function(request, response){ var query = new Parse.Query(Parse.Role); query.equalTo("users", request.user); query.find().then(function(roles){ var hasWriteAccess = false; for (var i = 0; i < roles.length; i++) { if (request.params.parseObject.getACL().getRoleWriteAccess(roles[i])) { hasWriteAccess = true; break; } } response.success(hasWriteAccess); }); });
Android 用户角色查询和本地检查写入权限
public static Task<Boolean> hasWriteAccess(final ParseObject parseObject) { final TaskCompletionSource<Boolean> voidTaskCompletionSource = new TaskCompletionSource<>(); ParseRole.getQuery().whereEqualTo("users", ParseUser.getCurrentUser()).findInBackground().continueWith(new Continuation<List<ParseRole>, Object>() { @Override public Object then(Task<List<ParseRole>> task) throws Exception { if (task.getError() == null) { List<ParseRole> parseRoles = task.getResult(); boolean hasWriteAccess = false; for (ParseRole parseRole : parseRoles) { if (parseObject.getACL().getRoleWriteAccess(parseRole)) { hasWriteAccess = true; break; } } voidTaskCompletionSource.trySetResult(hasWriteAccess); } else { voidTaskCompletionSource.trySetError(task.getError()); } return null; } }); return voidTaskCompletionSource.getTask(); }
从
Parse Documentation
- 获取是否明确允许给定用户 id 写入此对象。即使这
- 返回 {@code false},如果 getPublicWriteAccess 返回,用户仍然可以编写它
- {@code true} 或用户所属的角色具有写入权限。*/
我不能在我的主要帖子活动中使用这些方法,因为它们很慢network requests
,并且在查询帖子之前等待请求完成会导致糟糕的用户体验。
此解决方案不起作用,因为查询不会返回嵌套角色roles relation
,所以有什么建议吗?