如何向meteor用户添加角色配置文件页面?

如何向meteor用户添加角色配置文件页面?,meteor,roles,Meteor,Roles,我的应用程序中有2个角色。用户和医生。 我想,医生可以编辑额外的领域,如图片和医生的额外个人资料页上的文本字段 如何将此字段添加到用户集合的额外部分,而不是配置文件中,然后将其作为配置文件页/doctor/\u id公开 我现在正在尝试meteorkitchen,这很好,但是当我添加一个profile.doctor.field1并将其显示在像user\u settings/profile/doctor这样的页面上并进行更新时,配置文件的其他字段会被空值覆盖。我假设所有配置文件属性都在一个表单上编

我的应用程序中有2个角色。用户和医生。 我想,医生可以编辑额外的领域,如图片和医生的额外个人资料页上的文本字段

如何将此字段添加到用户集合的额外部分,而不是配置文件中,然后将其作为配置文件页/doctor/\u id公开

我现在正在尝试meteorkitchen,这很好,但是当我添加一个profile.doctor.field1并将其显示在像user\u settings/profile/doctor这样的页面上并进行更新时,配置文件的其他字段会被空值覆盖。我假设所有配置文件属性都在一个表单上编辑,当一个字段为空时,它会删除它们。但这不是我想要的

(有人能给厨房加个标签吗?我的名声不够。谢谢)

编辑: 这是路由器的设置

var roleMap = [
        ...
    { route: "user_settings.doctor",    roles: ["doctor","admin"] }
];
并将此部分附在表格中

"name": "edit_form",
"type": "form",
"mode": "update",
"title": "Edit your doctor profile",
"submit_route": "user_settings.profile.doctor",
"query": {
    "name": "current_user_data",
    "collection": "users",
    "filter": {
       "_id": "Meteor.userId()"
     },
     "find_one": true,
     "options": {},
     "params": []
     },
"fields": [
    {
       "name": "profile.doctor.quote",
       "title": "Favorite quote",
       "type": "string",
       "required": true
   }
]

问题是,在更新某些配置文件值时,其他配置文件值会被删除。

如果您想继续使用Meteor Kitchen,下面是我将如何进行的

  • 首先,您需要创建一个“医生”角色。请参阅厨房设计师上的应用程序页面,您可以将其添加到此处
  • 其次,您需要将新的“医生”角色添加到页面角色中。您可以直接在位于
    客户端/views/router.js中的角色映射中或使用设计器执行此操作
编辑在评论中的讨论之后,这里有一个更新:

您可以在设计器的“编辑源”部分直接更改集合名称。转到页面,在查询中设置

"query": {
                "name": "doctor_user",
                "collection": "users",
                "filter": {
                     "_id": ":userId"
                            },
                "find_one": false,
                "options": {},
                "params": []
        },
问题是,即使您这样做,也只有管理员可以更新users集合。因此,您需要从霹雳州下载用户角色包,将其放入您的项目中(仅放入文件夹),然后删除用户角色预安装包(
meteor remove perak:user roles

完成后,转到
server/collections
并将
users.js的
update
部分替换为:

    update: function (userId, doc, fieldNames, modifier) {
    return Users.isInRole ("admin")||  (Users.isInRole ("doctor") && 
    !_.contains(fieldNames,'roles')));
它将允许具有医生角色的用户更新除“角色”字段之外的任何用户字段。

最后一步,编辑
server\publications\users.js
文件并将其添加到其中:

Meteor.publish("doctor_user", function(_id){
   return  Users.isInRoles ({"doctor", "admin"}) ? Users.find({_id: _id}) : this.ready();
});

如果你想为医生创建一个额外的个人资料页面,它将允许你设置该页面,该页面只能通过路由器访问。关于您在此页面上提供的数据,如果您需要保护它,则必须更改相关的发布功能。如果它是一个完整的集合,你可以让它只对设计师中的“医生”开放。“extra profile.doctor”页面仅对医生可编辑,但如果编辑页面仅显示部分配置文件页面(在本例中仅显示quote字段),则会删除其他字段(电子邮件、姓名),谢谢您的帮助!最后,医生的附加个人资料页面应该是公开的。如果您试图将查询更改为
findOne=false
,我认为这不是问题所在。我试过了,结果还是一样。必须有更好的方法向配置文件添加额外的零件,而不是同时使用配置文件的每个字段进行更新。你知道吗?