La restriction de champs de mise en Sails.js Modèle
Question
Donc, j'ai un modèle avec certains champs comme suit:
// ...
slug: {
type: 'string',
required: true,
alphanumeric: true,
minLength: 3,
maxLength: 16
},
loggedinAt: 'date',
// ...
Je suis en utilisant les Voiles plan de la structure de sorte qu'il mappe automatiquement tout.Cependant, j'ai parfois des domaines comme l' loggedinAt
qui sont strictement interne et je ne veux pas qu'elles puissent être défini par l'utilisateur.
Tel qu'il est, si je fais un post demandes avec l' loggedinAt
champ, il va le mettre.Comment puis-je limiter cela?
La solution
Vous pouvez utiliser une stratégie pour limiter ce problème.Dans 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();
}
ou, tout simplement de l'ignorer certains champs (Voiles v0.10.x uniquement), utilisez l' la liste noire:
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();
}
Puis dans config/policies.js:
// Assuming your controller is "UserController"
UserController: {
create: "restrictUserCreate"
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow