有人可以确认,为了将用户添加到现有角色,该角色需要公开阅读& 写访问?
因为这似乎是我能让它发挥作用的唯一方法吗?
创建角色的代码(工作正常)
let roleACL = PFACL()
roleACL.setPublicReadAccess(true)
//roleACL.setPublicWriteAccess(true)
let role = PFRole(name: "ClubName", acl:roleACL)
role.saveInBackground()
将用户添加到所述角色的代码(Works如果写入访问权限设置为public)
let QueryRole = PFRole.query()
QueryRole!.whereKey("name", equalTo: "ClubName")
QueryRole!.getFirstObjectInBackgroundWithBlock({ (roleObject: PFObject?, error: NSError?) -> Void in
if error == nil
{
let roleToAddUser = roleObject as! PFRole
roleToAddUser.users.addObject(user)
roleToAddUser.saveInBackground()
//print(roleObject)
}
else
{
print(error)
//print(roleObject)
}
})
上面的代码可以正常工作,但正如我所说,只有当公众对该角色的写入权限设置为真时。
这让我疯狂了
此外,如果角色的意图是公共写访问权限不会使其更容易受到更改角色的人的影响?
如果角色不应该具有公共写访问权限,那么有人可以指出我正确的方向来使上述代码工作,而无需使用公共写访问权限设置角色。
如果该角色没有公开写入权限,我得到的错误是:找不到更新的对象(代码:101,版本:1.8.1)
答案 0 :(得分:0)
为什么不在云代码中执行所有工作,这将解决您的读/写问题。这就是我在做的事情。
需要注意的重要事项:当云代码JDK设置为“最新”时,下面的代码将无效,我必须将其设置为JDK 1.5,然后重新启动我的云代码。
Parse.Cloud.afterSave(Parse.User, function(request) {
Parse.Cloud.useMasterKey();
var user = request.object;
if (user.existed()) {
//console.log('object exits');
response.success();
// console.log('********return after save');
return;
}
// set ACL so that it is not public anymore
var acl = new Parse.ACL(user);
acl.setPublicReadAccess(false);
acl.setPublicWriteAccess(false);
user.setACL(acl);
user.save();
//add user to role
var query = new Parse.Query(Parse.Role);
query.equalTo("name", "signedmember");
query.first().then(function(object) {
if (object) {
object.relation("users").add(request.user);
object.save(null, {
success: function(saveObject) {
object.relation("users").add(request.user);
object.save(null, {
success: function(saveObject) {
// The object was saved successfully.
console.log('assigned user to role');
},
error: function(saveObject, error) {
// The save failed.
console.error("Failed creating role with error: " + error.code + ":"+ error.message);
}
});
},
});
}
});
});