Как неявно получить ACL записи ParseUser

неявно, имея ввиду роли, в которых находится пользователь, предоставьте мне права на запись для этого пользователя для этого объекта, и мои подходы неэффективны, я думаю:

  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

    • Получите, разрешено ли данному идентификатору пользователя явно писать этот объект. Даже если это
    • возвращает {@code false}, пользователь все еще может написать его, если getPublicWriteAccess вернет
    • {@code true} или роль, к которой принадлежит пользователь, имеет право на запись. */

Я не могу использовать эти методы в своих основных публикациях, потому что они медленные network requestsи ожидание завершения запроса, прежде чем запрашивать сообщения, приводит к ухудшению работы пользователя.

Это решение не будет работать, потому что запрос не вернет вложенные роли roles relationИтак, есть предложения?

0 ответов

Другие вопросы по тегам