2013-05-17 90 views
1

我在將自定義用戶字段添加到流星用戶對象(Meteor.user)時遇到問題。我想要一個用戶有一個「狀態」字段,我寧願不將它嵌套在「profile」(即profile.status)下,我知道默認情況下是r/w。 (我已經刪除autopublish。)將自定義字段添加到流星用戶時遇到特權問題

我已經能夠場發佈到客戶端就好了通過

Meteor.publish("directory", function() { 
    return Meteor.users.find({}, {fields: {username: 1, status: 1}}); 
}); 

...但我不能設置權限允許對日誌 - 用戶更新自己的status

如果我做

Meteor.users.allow({ 
    update: function (userId) {  
    return true; 
}}); 

Models.js,用戶可以編輯用戶的所有領域。這並不酷。

我試着做變體,如

Meteor.users.allow({ 
    update: function (userId) {  
    return userId === Meteor.userId(); 
}}); 

Meteor.users.allow({ 
    update: function (userId) {  
    return userId === this.userId(); 
}}); 

,他們只是在控制檯中我拒絕訪問錯誤。

這個有點documentation addresses,但沒有詳細說明。我在犯什麼愚蠢的錯誤?

(這類似於this SO問題,但這個問題只解決如何發佈領域,而不是如何對其進行更新。)

回答

3

嘗試:

Meteor.users.allow({ 
    update: function (userId, user) {  
    return userId === user._id; 
    } 
}); 

從收集的文檔。允許:

更新(用戶ID,DOC,FIELDNAMES,改性劑)

釷用戶userId想要更新文檔文檔。 (doc是數據庫中文檔的當前版本,沒有建議的更新。)返回true以允許更改。

5

這就是我如何運作的。

在服務器我發佈用戶數據

Meteor.publish("userData", function() { 
    return Meteor.users.find(
    {_id: this.userId}, 
    {fields: {'foo': 1, 'bar': 1}} 
); 
}); 

,並設置允許在客戶端代碼如下

Meteor.users.allow({ 
    update: function (userId, user, fields, modifier) { 
    // can only change your own documents 
    if(user._id === userId) 
    { 
     Meteor.users.update({_id: userId}, modifier); 
     return true; 
    } 
    else return false; 
    } 
}); 

,冥冥中我更新的用戶記錄,只要有一個用戶

if(Meteor.userId()) 
{ 
Meteor.users.update({_id: Meteor.userId()},{$set:{foo: 'something', bar: 'other'}}); 
} 
+0

它不適合我...... userData代表什麼? –

相關問題