Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
* beforeBlueprint
* @module :: Policy
* @description :: Simple policy to enable hooks into the model which can act upon req, res objects.
* @docs ::!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 );
} else {
sails.log.debug( 'Policy beforeBlueprint: Model "' + Model.identity + '" has no method controlBefore' + blueprint + '.' );
// 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

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.


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.


This comment has been minimized.

Copy link

harishanchu commented Mar 13, 2015

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.