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!