从其他用户修改对象时,快速返回“用户未授权”

时间:2014-10-07 01:58:38

标签: javascript node.js security express mongoose

我有一个看起来像这样的课堂模型:

/**
 * 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。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以在教室中添加“主”或“管理员”字段,并将创建者的userId存储在其中。

然后,您可以仅允许主持此特定教室的用户执行删除/修改等操作,同时让所有人进入。