限制在Sails.js模型中设置字段

时间:2014-06-04 16:02:27

标签: node.js mongodb express sails.js waterline

所以我有一个类似字段的模型:

// ...
slug: {
  type: 'string',
  required: true,
  alphanumeric: true,
  minLength: 3,
  maxLength: 16
},
loggedinAt: 'date',
// ...

我正在使用Sails蓝图结构,因此它会自动映射所有内容。但是,有时我会使用loggedinAt这样的字段,这些字段是严格内部的,我不希望它们能够由用户设置。

如果我使用loggedinAt字段发布帖子请求,则会设置它。我该如何限制?

1 个答案:

答案 0 :(得分:2)

您可以使用策略来限制此行为。在 api / policies / restrictUserCreate.js

module.exports = function (req, res, next) {

    // Check for the "loggedInAt" field in the request
    if (req.param('loggedInAt')) {
       return res.badRequest("Nuh uh, you can't set that!");
    }

    return next();

}

或者,要忽略某些字段(仅限Sails v0.10.x),请使用黑名单

module.exports = function (req, res, next) {

    // Make sure blacklist object exists, and use existing one if possible,
    // since this policy could be chained
    req.options.values = req.options.values || {};
    req.options.values.blacklist = req.options.values.blacklist || [];
    // Add restricted fields to the blacklist
    req.options.values.blacklist.push('loggedinAt');
    return next();

}

然后在 config / policies.js

// Assuming your controller is "UserController"
UserController: {
    create: "restrictUserCreate"
}