【发布时间】:2014-04-14 20:29:02
【问题描述】:
我正在使用 express 和 sequelize 制作应用程序。有用户和管理员。现在,我正在通过中间件处理权限。
假设有用户可以更改的消息:
var Message = sequelize.define('Message', {
content: Sequelize.STRING,
secret: Sequelize.STRING
});
var message = Message.build({
content: 'i like frogs',
secret: 'i like hogs more!'
});
app.put('/message', requireRole('user'), function(request, response) {
message.updateAttributes(request.body.content);
response.writeHead(200);
response.end('secret updated');
});
我想要一些更复杂的权限。
有什么好的方法可以解决这个问题?在这个例子中,我希望用户能够更新消息的content,但不能更新它的secret。
我可以将它烘焙到每条路线中,但随着模型的变化进行修改似乎会很痛苦。
app.put('/message', requireRole('user'), function(request, response) {
var attrs = {};
var role = request.session.user.role;
if (role == 'user' || role == 'admin') {
attrs.content = request.body.content;
}
if (role == 'admin') {
attrs.secret = request.body.secret;
}
message.updateAttributes(attrs);
response.writeHead(200);
response.end('secret updated');
});
有没有更好的方法来做到这一点?例如,我想我可以将此逻辑放入 Sequelize 的已定义模型的 get/set 方法中,但不知道这是否更简洁。
【问题讨论】:
标签: node.js security express permissions sequelize.js