Запрет установки полей в модели Sails.js
Вопрос
Итак, у меня есть модель с такими полями:
// ...
slug: {
type: 'string',
required: true,
alphanumeric: true,
minLength: 3,
maxLength: 16
},
loggedinAt: 'date',
// ...
Я использую структуру проекта Sails, поэтому она автоматически отображает все.Однако иногда у меня есть такие поля, как loggedinAt
которые являются строго внутренними, и я не хочу, чтобы пользователь мог их устанавливать.
В нынешнем виде, если я делаю запросы на публикацию с помощью loggedinAt
поле, оно установит его.Как я могу это ограничить?
Решение
Вы можете использовать политику, чтобы ограничить такое поведение.В API/политики/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"
}
Не связан с StackOverflow