我有一个看起来像这样的课堂模型:
/**
* 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来添加允许其他用户(而不是教室的创建者)加入课堂的功能。但是,由于发送请求的用户不是创建该对象的用户,因此Express返回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 :(得分:0)
您可以在教室中添加“主”或“管理员”字段,并将创建者的userId存储在其中。
然后,您可以仅允许主持此特定教室的用户执行删除/修改等操作,同时让所有人进入。