2014-10-07 46 views
0

我有一個教室的模型,看起來像這樣:快速返回「用戶無權」從其他用戶修改對象時

/** 
* Classroom Schema 
*/ 
var ClassroomSchema = new Schema({ 
    created: { 
     type: Date, 
     default: Date.now 
    }, 
    participants: [{ 
     type: Schema.ObjectId, 
     ref: 'User' 
    }], 
    lesson: { 
     type: Schema.ObjectId, 
     ref: 'Lesson', 
     required: 'Define a lesson for this classroom', 
    }, 
    user: { 
     type: Schema.ObjectId, 
     ref: 'User' 
    }, 
    currentTaskIndex: { 
     type: Number, 
     default: 0 
    }, 
}); 

正如你可以看到,該模型保留對已創建的用戶一個參考課堂(用戶),它也有很多參與者(更多用戶)。

我試圖添加功能以允許其他用戶(不是課堂的創建者)通過向參與者字段中的新用戶發送PUT請求到教室API來加入課堂。然而,由於用戶發送的請求是不是誰創建對象的一個​​,快速返回一個403(禁止):

exports.hasAuthorization = function(req, res, next) { 
    if (req.classroom.user.id !== req.user.id) { 
     return res.status(403).send('User is not authorized'); 
    } 
    next(); 
}; 

什麼是最好的方法/模式來解決這個問題,允許用戶加入由另一個創建教室用戶,但不要執行其他操作,如刪除對象。其他字段可能會被其他參與者更新,如currentTaskIndex。

感謝您的幫助!

回答

0

您可以在教室中添加「主」或「管理員」字段,並將創建者的用戶ID存儲在其中。

然後,您可以允許刪除/修改等操作,只有爲這個特定教室的主人的用戶,同時讓每個人都在。