如何向meteor用户添加角色配置文件页面?
我的应用程序中有2个角色。用户和医生。 我想,医生可以编辑额外的领域,如图片和医生的额外个人资料页上的文本字段 如何将此字段添加到用户集合的额外部分,而不是配置文件中,然后将其作为配置文件页/doctor/\u id公开 我现在正在尝试meteorkitchen,这很好,但是当我添加一个profile.doctor.field1并将其显示在像user\u settings/profile/doctor这样的页面上并进行更新时,配置文件的其他字段会被空值覆盖。我假设所有配置文件属性都在一个表单上编辑,当一个字段为空时,它会删除它们。但这不是我想要的 (有人能给厨房加个标签吗?我的名声不够。谢谢) 编辑: 这是路由器的设置如何向meteor用户添加角色配置文件页面?,meteor,roles,Meteor,Roles,我的应用程序中有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
,我认为这不是问题所在。我试过了,结果还是一样。必须有更好的方法向配置文件添加额外的零件,而不是同时使用配置文件的每个字段进行更新。你知道吗?