2013-12-08 4 views
3

Его можно разбить на две части:Как ограничить создание учетной записи Meteor администратором?

1) Как указать учетную запись как администратор?

Это то, что у меня сейчас происходит, и это не работает.

Meteor.startup(function() { 
    if (Meteor.users.find().count() === 0) { 
     console.log("Adding fake data"); 
     Accounts.createUser({username:"admin", email:"[email protected]", password:"1234", admin: true, profile:{name:"Administrator"}}); 
    } 

Свойство «admin» пользователя не работает. Я не уверен, что вставить его в профиль - это правильная вещь ... Любые предложения здесь?

2) Как я могу ограничить создание пользователей только администраторами?

Это то, что я собираюсь, и это также не работает

Meteor.users.allow({ 
    insert: function(userId, doc) { 
     // only admin and create 
     return (userId && Meteor.users(userId).admin); 
    }, 

ответ

2

Отъезд authorization Atmosphere плагин. Он обрабатывает авторизацию на основе ролей и имеет пример ограничения доступа пользователей к авторизованным пользователям.

+0

Я рассмотрю это и вернусь к вам. выглядит хорошо, хотя – Chet

+0

Пакет метеорных ролей также может представлять интерес. Пакет авторизации @Cuberto - это вилка метеорных ролей. Разница заключается в том, что авторизация позволяет разделить роли и разрешения, в то время как роли обрабатывают все одинаково (в основном, только теги). Таким образом, роли, как правило, немного проще, тогда как авторизация разрешает вложенные разрешения внутри ролей. Метеорные роли - https://github.com/alanning/meteor-roles – alanning

+0

btw, вот пример ограничения создания нового пользователя: https://github.com/alanning/meteor-roles/blob/master/examples/ mini-pages/server/server.js # L77-L85 – alanning

3

Вы могли бы сделать что-то вроде этого:

стороны сервера кода:

Meteor.methods({ 
    createUser:function(username, email, password, name) { 
     if(Meteor.user() && Meteor.user().admin === true) { //You'll have to customize this to how you want it 

      return Accounts.createUser({ 
         username: username, 
         email: email, 
         password: password, 
         profile: { 
          name: name 
         } 
        }); 
     }else{ 
      console.log("not logged in or not an admin"); 
     } 
    }, 
    makeMeAdmin: function() { 
     //You can customize this to have a password or something this is just an example 
     Meteor.users.update({_id: this.userId}, {$set:{admin:true}}); 
    } 
}); 

стороны клиента кода:

Сделайтесь админами:

Meteor.call("makeMeAdmin"); 

Создание пользователя:

Meteor.call("createUser", "username", "[email protected]", "password123", "Bob Bob"); 
+0

Я не уверен, что работает {$ set: {admin: true}}. – Chet

+0

Он должен работать. Вы не увидите его на стороне клиента, потому что поле не опубликовано. Это было просто в качестве примера, чтобы показать, как использовать что-то подобное в качестве условия для обновления пользователя. Вы должны использовать то, что вы делали раньше, если найдете его лучше – Akshat

+0

Извините, что прикоснулся к длинному датированному ответу, но @Akshat это отправит пароль в виде простого текста по проводу? – Shaded

Смежные вопросы