MeteorJS useraccounts:核心和流星角色

时间:2014-12-20 22:43:38

标签: javascript authentication meteor

我正在使用MeteorJS开发简单的网络应用程序。我是MeteorJs的新人。我使用useraccounts:核心包和alanning的meteor-roles。在注册新用户时为用户分配角色是否可行?

编辑1

我尝试过使用onCreateUser钩子,但有些东西无效。

Accounts.onCreateUser(function(options, user){
  var role = ['unselected'];
  Roles.addUsersToRoles(user, role);
  return user;
});

3 个答案:

答案 0 :(得分:2)

以下方法必须仅在服务器端运行。线索是你需要先创建用户,从创建中获取id,然后附加一个角色。

Meteor.methods({
rolesCreateUser: function (user) {

    if (_.isObject(user)) {

        if (user.username) {
            var id = Accounts.createUser({
                username: user.username,
                email: user.email,
                password: user.password
            });
            //We add roles to the user
            if (user.roles.length > 0) {                   
                Roles.addUsersToRoles(id, user.roles);
            }
            _.extend(user, {id: id});

            return user;
        }
    }
}   
});

然后在客户端使用用户的数据调用该方法:

    Meteor.call('rolesCreateUser', newUserData, function (error, newCreatedUser) {

        if (error) {
            //The error code
        } else {
           //Do something with newCreatedUser
       }

    });

答案 1 :(得分:1)

我有这种方式来创建用户(如果我低调你的例子,你只需要一些用户,只需要一些角色,所以当前用户只需创建这个),也可以使用一些定制的登录按钮或类似的东西

<强> Server.js

Meteor.methods({
     createUsers: function(email,password,roles,name){
       var users = [{name:name,email:email,roles:[roles]},
                   ];
.each(users, function (user) {
   var id;
id = Accounts.createUser({
     email: user.email,
     password: password,
     profile: { name: user.name }
     });
 if (user.roles.length > 0) {
          Roles.addUsersToRoles(id, user.roles);
         }
        });
},
       deleteUser : function(id){       ///Some Delete Method (ignore if dont needed)
      return Meteor.users.remove(id);
      },
    });

发布方法

//publish roles
      Meteor.publish(null, function (){ 
       return Meteor.roles.find({})
       })
Meteor.publish("Super-Admin", function () {
        var user = Meteor.users.findOne({_id:this.userId});

         if (Roles.userIsInRole(user, ["Super-Admin"])) {
        return Meteor.users.find({}, {fields: {emails: 1, profile: 1, roles: 1}});
         } 
   this.stop();
          return;
       });

          Meteor.publish("Admin", function () {
       var user = Meteor.users.findOne({_id:this.userId});

        if (Roles.userIsInRole(user, ["Admin"])) {
        return Meteor.users.find({}, {fields: {emails: 1, profile: 1, roles: 1}});
       } 
this.stop();
     return;
      });
      Meteor.publish(null, function (){ 
     return Meteor.roles.find({})
     })

所以在客户端client / register.html

<template name="register">
      <form id="register-form" action="action" >
        <input type="email" id="register-email" placeholder="Nombre Nuevo Usuario">
        <input type="password" id="register-password" placeholder="Password">        
          <select id="register-rol" class="form-control">
             <option value="Admin" selected>Admin</option>
            <option value="Super-Admin" selected>Super Admin</option>
            <option value="Normal" selected>Normal</option>
         </select>
       <input type="submit" value="Register">
      </form>
    </tempalate>

并在 register.js 上调用服务器方法

 Template.registrar.events({
  'submit #register-form' : function(e, t) {
    e.preventDefault();    
     var email = t.find('#register-email').value,
     password = t.find('#register-password').value,
      roles = $( "#register-rol" ).val();
    Meteor.call("createUsers", email, password,roles);
     return false;
      },
    'click #deleteUser' : function(event,template){
     var idUsuario= this._id;
     Meteor.call('deleteUser',{_id:idUsuario})
     }
    });

删除部分(html)如果帐户创建正确,这也是可选的

{{#each users}}
      <li id="user"><h6>{{email}}</h6><h6>{{roles}}</h6></li>
        <button id="deleteUser" class="btn btn-danger btn-xs" > Borrar Usuario        {{email}}       </button>
     {{/each}}

<强>的客户机/ registerList.js

   Template.registrar.helpers({
         users: function () {
         return Meteor.users.find();
       },
        email: function () {
        return this.emails[0].address;
        },
       roles: function () {
       if (!this.roles) return '<none>';
    return this.roles.join(',');
      }
      });

记住订阅

  Meteor.subscribe('Admin');
  Meteor.subscribe('Super-Admin');

希望这对于凌乱的代码感到抱歉

答案 2 :(得分:0)

您可能想要使用OnCreateUser挂钩:http://docs.meteor.com/#/full/accounts_oncreateuser