问题很简单:
- 创建用户并将其添加到角色
- 创建一个对象并为其赋予角色 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/