android - 角色 ACL 无法使用 Parse 的 Android 本地数据存储 :

标签 android parse-platform

问题很简单:

  1. 创建用户并将其添加到角色
  2. 创建一个对象并为其赋予角色 ACL

用户将能够找到并固定该对象,但是无法从本地数据存储中检索该对象。如果我切换到用户或公共(public) ACL,则会检索该对象。

示例:

public void findAndPinInBackground(ParseQuery<ParseObject> query, final MyCallback callback) {
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(final List<ParseObject> eventList, ParseException e) {
            if (e == null) {
                ParseObject.pinAllInBackground(eventList, new SaveCallback() {
                    @Override
                    public void done(ParseException e) {
                        if (e == null) {
                            Log.d(TAG, "Pinned " + eventList.size() + " objects");
                            callback.onTaskCompleted();
                        } else {
                            callback.onTaskFailed(e);
                        }
                    }
                });
            } else {
                callback.onTaskFailed(e);
            }
        }
    });
}

日志:“固定 1 个对象”

ParseQueryAdapter<ParseObject> eventsAdapter = new ParseQueryAdapter<ParseObject>(getActivity(), new ParseQueryAdapter.QueryFactory<ParseObject>() {
    public ParseQuery<ParseObject> create() {
        ParseQuery query = new ParseQuery("Event");
        query.orderByAscending("name");
        query.fromLocalDatastore();
        return query;
    }
}, android.R.layout.simple_list_item_1);

eventsAdapter.addOnQueryLoadListener(new ParseQueryAdapter.OnQueryLoadListener<ParseObject>() {
    @Override
    public void onLoading() { }

    @Override
    public void onLoaded(List<ParseObject> parseObjects, Exception e) {
        Log.d(TAG, "Retrieved " + parseObjects.size() + " objects");
    }
});

日志:“检索到 0 个对象”

Facebook 已确认这是 known bug .

有解决办法吗?

最佳答案

iOS 文档现在提到了这一点:

To access this data protected by Role based ACLs, you will need to ignore ACLs when executing a Local Datastore query:

PFQuery *query = [[[PFQuery queryWithClassName:@"Note"]
                   fromLocalDatastore]
                  ignoreACLs];

https://parse.com/docs/ios/guide#local-datastore-security

这似乎同样适用于 Android,它有 ignoreACLs在 API 中:

public ParseQuery<T> ignoreACLs()

Ignore ACLs when querying from the Local Datastore.

This is particularly useful when querying for objects with Role based ACLs set on them.

https://parse.com/docs/android/api/com/parse/ParseQuery.html#ignoreACLs%28%29

关于android - 角色 ACL 无法使用 Parse 的 Android 本地数据存储 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24659129/

相关文章:

Android SharedPreferences String Set - 一些项目在应用重启后被移除

android - 如何将图像放入包中并将其传递给另一个 Activity

ios - Parse.com IAP : How to switch between production and sandbox mode?

android - 警报对话框中使用的 View 内的 onClick 按钮

java - 从一个点到另一个点以相同的角度移动?

android - 检查 (ParseUser.getCurrentUser() != null) 时出现 NullPointerException

iphone - 解析 - 应用程序终止错误

ios - 如何在解析中检索单列数据?

Javascript - 删除类中的重复项

android - 获取android联系人电话号码列表