【发布时间】:2014-07-14 17:55:36
【问题描述】:
我有一个“管理员”角色,我想将它分配给我 Parse 中当前的所有用户对象。但是,无论我尝试什么,我都会收到 400 错误。当我尝试通过仪表板手动添加 ACL 时,它不会保存。例如,我将输入 "{ "role:Administrator":{"read":true, "write":true}}" 并在刷新时恢复为(未定义)。
编辑:所以我尝试创建一个 Cloud Code 函数。尝试运行该函数时仍然收到 400 错误以及“结果:错误:未定义的未授权”。
main.js(云代码):
Parse.initialize("*****", "*****");
Parse.Cloud.define("modifyUser", function(request, response) {
if (!request.user) {
response.error("Must be signed in to call this Cloud Function.")
return;
}
// The rest of the function operates on the assumption that request.user is *authorized*
Parse.Cloud.useMasterKey();
var query = new Parse.Query(Parse.User);
query.find({
success: function(results) {
response.success("Successfully retrieved " + results.length + " scores.");
// Do something with the returned Parse.Object values
for (var i = 0; i < results.length; i++) {
var object = results[i];
alert(object.id + ' - ' + object.get('objectId'));
}
},
error: function(error) {
response.error("Error: " + error.code + " " + error.message);
}
});
});
我的客户端 .js 文件: $(函数(){ console.log("运行仪表板"); Parse.initialize("**", "**");
Parse.Cloud.run('modifyUser', {username: "myusername@email.com"}, {
success: function(result) {
// result is 'Hello world!'
console.log(result);
},
error: function(error) {
console.log("error: " + error.code + " " + error.message);
}
});
});
更新前: 理想情况下,我想遍历我的 Javascript 文件中的所有用户并使用以下代码更新他们的角色:
// set up ACL for User object
var userACL = new Parse.ACL();
userACL.setRoleWriteAccess("Administrator", true);
userACL.setRoleReadAccess("Administrator", true);
// grab all Users
var user_query = new Parse.Query(Parse.User);
user_query.find( {
success: function(users) {
// querying all users works successfully
console.log(users);
// assign Administrator ACL to each user
for (var i=0; i<users.length; i++) {
users[i].setACL(userACL);
users[i].save(null, {
success: function(user) {
console.log("save successfully");
},
error: function(error) {
console.log("error saving: " + error.code + " " + error.message);
}
});
}
},
error: function(error) {
console.log("error: " + error.code + " " + error.message);
}
});
但是,这将返回以下内容:POST https://api.parse.com/1/classes/_User/userIDhere 400(错误请求)对于我尝试保存的每个用户以及“用户对象不能允许来自其他用户的写入”,尽管我的用户列在管理员角色下。
任何帮助将不胜感激。
【问题讨论】:
-
几件事..您在帖子中为 ACL 列出的 JSON 无效,它缺少结束
}。其次,您需要使用主密钥进行这些类型的操作,作用于其他用户。你是用云代码写这个函数吗?节点? -
@Fosco 感谢您的回复。我听从了你的建议,但仍然收到错误。主帖已更新。此外,缺少的 JSON 括号是 SO 的错字。它仍然无法在仪表板中更新。
-
这会阻止用户访问他们自己的用户对象,应该被拒绝。我认为这里的一个足够的解决方案是从数据浏览器(在更多下拉菜单下)设置一个类权限,以将查找/更新/删除限制为管理员角色..
-
@Fosco 这就是让我难过的地方。我从一开始就将其设置为“管理员”,并且我设置了具有两个用户关系的管理员角色。也许我错过了一些明显的东西。以下是我的仪表板的一些屏幕截图:imgur.com/a/nQe1E
-
另外,在 Cloud Code 中使用 Master Key 时,我什至无法查询我的用户,这很奇怪。