在固定装置中设置 Meteor 用户角色不起作用

Setting Meteor user roles in fixtures not working

我有一个 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: "admin@testing.demo", profile: { name: "Admin" }, roles: ["admin"]},
        {username: "school", email: "school@testing.demo", profile: { name: "School Name" }, roles: ["school"]},
        {username: "teacher", email: "teacher@testing.demo", 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
        })
    }
}

启动我的项目时,所有帐户都已成功创建,但其中 none 个帐户具有角色字段。我做错了什么?

你做错的是你将选项传递给了它不接受的函数。 createUser options 只接受 usernameemailpasswordprofile。你应该研究docs,流星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(); 调用或 fiddle 和 Accounts.onCreateUser 回调直接设置角色,这非常适合处理您传递给 createUser 的所有内容。希望对您有所帮助。