I’m using this cloud function to let an admin assign/change Roles to users:
// change user role
Moralis.Cloud.define('changeRole', async (request) => {
if (!await validateUserRole(request.user, 'Administrator')) throw "No access" // validate user role
const userQuery = new Moralis.Query(Moralis.User);
userQuery.equalTo('objectId', request.params.userId);
const userObject = await userQuery.first({useMasterKey:true});
const roleQuery = new Moralis.Query(Moralis.Role)
const roles = await roleQuery.find({ useMasterKey: true })
for (let i = 0; i < roles.length; i++) {
if (roles[i].get('name') === request.params.roleName) {
logger.info(roles[i].get('name'))
roles[i].getUsers().add(userObject)
} else {
roles[i].getUsers().remove(userObject)
}
roles[i].save()
}
return request.params.roleName
},{
fields : ['roleName', 'userId'],
requireUser: true
})
It works fine, but I cannot set the CLP of the Role class to anything less than Public write, which makes no sense.
It’s because the object.save() function has no access and doesn’t work with { useMasterKey: true } to override the CLP.
Am I using the wrong approach?