Reputation: 41
I have 2 roles in my app. Users and doctors. I want that a doctor can edit extra fields like picture and text field on an extra profile page for doctors.
How to add this fields probably not to the profile but to an extra part of the users collection and make it then public availible as a profile page /doctor/_id
I am now experimenting with meteorkitchen, which is great, but when I add a profile.doctor.field1 and show this on an page like user_settings/profile/doctor and update it the other fields of the profile are overwritten with empty values. I assume it assumes that all profile attributes are edited on one form and when one field is empty so it deletes them. But this is not what I want.
(Can someone add a tag meteorkitchen please. I have not enough reputation. thanks)
Edit: this are the settings for the router
var roleMap = [
...
{ route: "user_settings.doctor", roles: ["doctor","admin"] }
];
and attached this part for the form
"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
}
]
the problem is that on update some of the profile values the others are deleted.
Upvotes: 1
Views: 372
Reputation: 3226
If you want to stick with Meteor Kitchen, here is how I would proceed.
client/views/router.js
or using the designer.EDIT Following the discussion in the comments here is an update:
You can change the collection name directly in the section "Edit source" of the designer. You go to your page, in the query, you set
"query": {
"name": "doctor_user",
"collection": "users",
"filter": {
"_id": ":userId"
},
"find_one": false,
"options": {},
"params": []
},
The thing is that even if you do that, only admins can update the users collection. So you need to download the user-roles package from perak, put it inside your project (only put the folders) and remove the user-roles pre-installed package (meteor remove perak:user-roles
).
Once you have done that, go to server/collections
and replace the update
part of users.js
with that:
update: function (userId, doc, fieldNames, modifier) {
return Users.isInRole ("admin")|| (Users.isInRole ("doctor") &&
!_.contains(fieldNames,'roles')));
It will allow users with the doctor role to update any user field except for the "roles" field.
Last step, you edit the server\publications\users.js
file and add this in it:
Meteor.publish("doctor_user", function(_id){
return Users.isInRoles ({"doctor", "admin"}) ? Users.find({_id: _id}) : this.ready();
});
Upvotes: 1