Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Sails-beforeBlueprint-Policy
/**
* 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();
}
};
// 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();
}
};
@mphasize

This comment has been minimized.

Copy link
Owner Author

mphasize commented Mar 2, 2015

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.

@IanVS

This comment has been minimized.

Copy link

IanVS commented Mar 2, 2015

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.

@harishanchu

This comment has been minimized.

Copy link

harishanchu commented Mar 13, 2015

@IanVS
This is a workaround to implement custom lifecycle callback. To check unique username before user creation you can use the default lifecycle callback beforeCreate in your model like:

beforeCreate: function(values, cb) {
   ...
 },

Please refer docs for details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.