我正在制作一个Android应用程序,其中有2个UserTypes是管理员和普通用户,管理员有能力控制Parse数据库编辑,添加和删除但是我遇到了有关删除用户的问题这里是我的代码但是它无法正常工作
final String userId = user.getUserId();
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("objectid", userId);
query.getFirstInBackground(new GetCallback<ParseUser>() {
public void done(ParseUser object, ParseException e) {
// TODO Auto-generated method stub
try {
object.delete();
Toast.makeText(getApplicationContext(),
"Successfully deleted Project"+userId, Toast.LENGTH_LONG).show();
//prog.dismiss();
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
任何帮助将受到赞赏thx
答案 0 :(得分:5)
用户无法从客户端删除其他用户。可以使用Parse.Cloud.useMasterKey()
在云代码中完成。
(顺便说一句,看起来发布的代码甚至没有通过id获取用户。这可能会导致whereEqualTo("objectId", someObjectId)
找到一个对象,但是解析为此提供了一种特殊形式的查询名为getInBackground()
。See the doc for Parse.Query。
编辑 - 在云代码中,函数将是这样的:
Parse.Cloud.define("deleteUserWithId", function(request, response) {
Parse.Cloud.useMasterKey();
var userId = request.params.userId;
var query = new Parse.Query(Parse.User);
query.get(userId).then(function(user) {
return user.destroy();
}).then(function() {
response.success(user);
}, function(error) {
response.error(error);
});
});
从客户端(虽然我是一个java dilettante):
HashMap<String, String> params = new HashMap<String, String>();
params.put("userId", userId);
ParseCloud.callFunctionInBackground("deleteUserWithId", params, new FunctionCallback<Float>() {
void done(Object result, ParseException e) {
if (e == null) {
// success
}
}
});
答案 1 :(得分:1)
ParseUser user = ParseUser.getCurrentUser();
user.deleteInBackground(new DeleteCallback() {
@Override
public void done(com.parse.ParseException e) {
if (e == null) {
//user deleted
} else {
ccd.showDialog(mContext, e.getMessage());
e.printStackTrace();
}
}
});
答案 2 :(得分:0)
可以通过Parse Rest API访问主密钥。只需编写一个Parse Cloud Code函数来使用主密钥删除用户,然后使用Parse Android API从admin帐户调用该函数。