parse swift 将新用户添加到现有角色
parse swift add new user to existing role
有人可以确认一下,为了将用户添加到现有角色,该角色需要具有 public 读取和 写入 访问权限吗?
因为这似乎是我让它工作的唯一方法?
创建角色的代码(工作正常)
let roleACL = PFACL()
roleACL.setPublicReadAccess(true)
//roleACL.setPublicWriteAccess(true)
let role = PFRole(name: "ClubName", acl:roleACL)
role.saveInBackground()
将用户添加到所述角色的代码(如果写入访问权限设置为 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)
}
})
上面的代码有效,但正如我所说,只有当 public 对角色的写访问权限设置为 true 时。
这让我发疯
此外,如果该角色旨在拥有 public 写入权限,这不会使其容易受到更改角色的人的攻击吗?
如果该角色不应具有 public 写访问权限,那么有人可以指出正确的方向以使上述代码正常工作,而无需为角色设置 public 写访问权限。
如果角色没有 public 写入权限,我得到的错误是:找不到要更新的对象(代码:101,版本:1.8.1)
为什么不在云代码中执行所有工作,这将使您解决 read/write 问题。这是我正在做的。
需要注意的重要事项:当云代码 JDK 设置为 'latest' 时,下面的代码将不起作用,我必须将其设置为 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);
}
});
},
});
}
});
});
有人可以确认一下,为了将用户添加到现有角色,该角色需要具有 public 读取和 写入 访问权限吗?
因为这似乎是我让它工作的唯一方法?
创建角色的代码(工作正常)
let roleACL = PFACL()
roleACL.setPublicReadAccess(true)
//roleACL.setPublicWriteAccess(true)
let role = PFRole(name: "ClubName", acl:roleACL)
role.saveInBackground()
将用户添加到所述角色的代码(如果写入访问权限设置为 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)
}
})
上面的代码有效,但正如我所说,只有当 public 对角色的写访问权限设置为 true 时。
这让我发疯
此外,如果该角色旨在拥有 public 写入权限,这不会使其容易受到更改角色的人的攻击吗?
如果该角色不应具有 public 写访问权限,那么有人可以指出正确的方向以使上述代码正常工作,而无需为角色设置 public 写访问权限。
如果角色没有 public 写入权限,我得到的错误是:找不到要更新的对象(代码:101,版本:1.8.1)
为什么不在云代码中执行所有工作,这将使您解决 read/write 问题。这是我正在做的。
需要注意的重要事项:当云代码 JDK 设置为 'latest' 时,下面的代码将不起作用,我必须将其设置为 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);
}
});
},
});
}
});
});