Created
March 2, 2015 12:31
-
-
Save mphasize/e9ed62f9d139d2152445 to your computer and use it in GitHub Desktop.
Sails-beforeBlueprint-Policy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* beforeBlueprint | |
* | |
* @module :: Policy | |
* @description :: Simple policy to enable hooks into the model which can act upon req, res objects. | |
* @docs :: http://sailsjs.org/#!documentation/policies | |
* | |
*/ | |
var actionUtil = require( 'sails/lib/hooks/blueprints/actionUtil' ); | |
capitaliseFirstLetter = function ( string ) { | |
return string.charAt( 0 ).toUpperCase() + string.slice( 1 ); | |
}; | |
module.exports = function ( req, res, next ) { | |
var Model = actionUtil.parseModel( req ); | |
var blueprint = capitaliseFirstLetter( req.options.action ); // we actually enable this for all actions, not only blueprints | |
if ( typeof Model[ "controlBefore" + blueprint ] === "function" ) { | |
var result = Model[ "controlBefore" + blueprint ]( req, res, next ); | |
//next(); | |
} else { | |
sails.log.debug( 'Policy beforeBlueprint: Model "' + Model.identity + '" has no method controlBefore' + blueprint + '.' ); | |
next(); | |
} | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Model defintion api/models/user.js | |
module.exports = { | |
attributes: { | |
name: "string", | |
"posts": { | |
collection: "post", | |
via: "user" | |
} | |
}, | |
// beforeFind hook to modify the request before it hits the find blueprint | |
// other hooks possible, with the naming schema of controlBefore*Blueprint | |
controlBeforeFind: function ( req, res, next ) { | |
// modify req.options.where OR req.body OR req.query as you need | |
next(); | |
} | |
}; |
Oh man, this is awesome. I've been trying to figure out how to check unique username before user creation, and this looks like the perfect solution.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This Policy enables hooks into the Model to provide function that can modify request and response options prior to a Blueprint being executed. Very useful for access control or setting up default associations between models.