Hello,
I’m trying achieve the following:
- Disable account creation by users using the {{> loginButtons}}
- Create a form where an Admin (role) can create users DONE
- Send an e-mail notification with username & password DONE
- Create a select with two roles (user & admin) DONE
- Use value from created select while creating an account to add a role to the account I’m creating
I have created the following form:
My submit button code (main.js - client)
"submit .add-account": function(event, template){
event.preventDefault();
var useremail = event.target.user_email.value;
var userpwd = event.target.user_pwd.value;
var userpwd2 = event.target.user_pwd2.value;
var userfirst = event.target.user_first.value;
var userlast = event.target.user_last.value;
var userusername = event.target.user_username.value;
var role = event.target.role.value;
var payment = event.target.payment.value;
 var letters = /^[a-zA-Z]+$/;
if(userpwd != userpwd2){
	Bert.alert('Passwords do not match!', 'danger' );
	return false;
}
if(empty(useremail) || empty(userpwd) || empty(userpwd2) || empty(userfirst) || empty(userlast) || empty(userusername) || empty(role)){
	Bert.alert('You cannot submit empty values, sadly', 'danger' );
return false;
}
if(empty(payment)){
	Bert.alert('Perhaps you want to pay your workers. No?', 'danger' );
	return false;
}
if(!letters.test(userfirst)){
	Bert.alert('Your first name cannot be like that, I am sorry.', 'danger' );
	return false;
}
if(!letters.test(userlast)){
	Bert.alert('The last name is incorrect. Try a different one!', 'danger' );
	return false;
}
if(!letters.test(userusername)){
	Bert.alert('Weird symbols found in the username field. Hmmm..', 'danger' );
	return false;
}
if(userpwd.length < 4){
	Bert.alert('Your password is way too short! We are very secure, FYI.', 'danger' );
	return false;
}
  if (!Roles.userIsInRole(this.userId, ['admin'])) {
	Bert.alert('You are not an admin to do this.', 'danger' );
	return false;
  }
console.log(useremail, userpwd, userfirst, userlast, userusername, role, payment);
  var account;
account = Accounts.createUser({
			email: useremail,
			password: userpwd,
			profile: {
				name_first:  userfirst,
				name_last:  userlast,
				username:  userusername,
				payment: payment,
			},
			username:  userusername, 
		});
//	Meteor.call('sendEmail', useremail, "projectName account creation.", 
 //   "Your account ["+userusername+"] has been created. Password: ["+userpwd+"] Role: ["+role+"]. Login with your username/email & password here: URL");
Roles.addUsersToRoles(account, ['admin'], 'default-group');
event.target.user_email.value = '';
event.target.user_pwd.value = '';
event.target.user_pwd2.value = '';
event.target.user_first.value = '';
event.target.user_last.value = '';
event.target.user_username.value = '';
event.target.role.value = '';
event.target.payment.value = '';
Bert.alert('Worker added. Woop!', 'success' );
}
});
client.js - server
Meteor.publish(null, function (){
  return Meteor.roles.find({})
});
// Give authorized users access to sensitive data by group
Meteor.publish('secrets', function (group) {
    if (Roles.userIsInRole(this.userId, ['admin', 'default-group'], group)) {
        return Meteor.secrets.find({group: group});
    } else {
        // user not authorized. do not publish secrets
        this.stop();
        return;
    }
});
Error I’m getting:
alanning_roles.js?hash=74a6254…:643 Uncaught Error: Missing 'users' param
    at Object._updateUserRoles (alanning_roles.js?hash=74a6254…:643)
    at Object.addUsersToRoles (alanning_roles.js?hash=74a6254…:180)
    at Object.submit .add-account (main.js:344)
    at blaze.js?hash=f33d3df…:3775
    at Function.Template._withTemplateInstanceFunc (blaze.js?hash=f33d3df…:3744)
    at Blaze.View.<anonymous> (blaze.js?hash=f33d3df…:3774)
    at blaze.js?hash=f33d3df…:2617
    at Object.Blaze._withCurrentView (blaze.js?hash=f33d3df…:2271)
    at Blaze._DOMRange.<anonymous> (blaze.js?hash=f33d3df…:2616)
    at HTMLFormElement.<anonymous> (blaze.js?hash=f33d3df…:863)
If I try to do this in the console.
Roles.addUsersToRoles(Meteor.userId(), 'admin', 'default-group');
I get this error:
update failed: Access denied
Help please!
