Установка ролей пользователей Meteor в приборах не работает

У меня есть приложение Meteor со следующим кодом приборов:

/imports/startup/server/fixtures.js

import { Meteor } from 'meteor/meteor'
import { Accounts } from 'meteor/accounts-base'

if(Meteor.users.find().count === 0) {
    const users = [
        {username: "admin", email: "[email protected]", profile: { name: "Admin" }, roles: ["admin"]},
        {username: "school", email: "[email protected]", profile: { name: "School Name" }, roles: ["school"]},
        {username: "teacher", email: "[email protected]", profile: { name: "Teacher" }, roles:["teacher"]}
    ]

    for(let user of users) {
        Accounts.createUser({
            username: user.username,
            email: user.email,
            password: "123456",
            profile: {
                name: user.profile.name,
            },
            roles: user.roles
        })
    }
}

При запуске моего проекта все учетные записи создаются успешно, за исключением того, что ни одна из них не имеет поля ролей. Что я делаю не так?


person Barry Michael Doyle    schedule 10.04.2017    source источник


Ответы (1)


Что вы делаете неправильно, так это то, что вы передаете функции параметры, которые она не принимает. createUser options принимает только username, email, password и profile. Вам следует изучить документацию, API метеоров очень хорошо документирован.

Теперь, чтобы установить роли пользователей, у вас есть несколько вариантов, один из них будет использовать _id вновь созданного пользователя, который возвращается createUser, а затем установить роли следующим образом:

const userId = Accounts.createUser({
        username: user.username,
        email: user.email,
        password: "123456",
        profile: {
            name: user.profile.name,
        });
Roles.addUsersToRoles(userId, user.roles)

предполагая, что это код на стороне сервера. На клиенте это не сработает. Вы также можете установить роли напрямую, используя вызов Meteor.users.update();, или повозиться с обратным вызовом Accounts.onCreateUser, что очень удобно для манипулирования всем, что вы передаете в createUser. Надеюсь, это поможет.

person tomsp    schedule 10.04.2017
comment
Спасибо :) Сэкономил мне много времени на выяснение этого - person Barry Michael Doyle; 10.04.2017