0

隐含的意思是考虑到用户所在的角色,让我获得该用户对该对象的写访问权限,而我的方法效率低下,我认为:

  1. 云代码功能用于查询用户的角色,然后检查用户或他的角色是否有权访问该对象。
  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);
    });
  });
  1. 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,所以有什么建议吗?

4

0 回答 0