Sails学习笔记(4)——过滤器policies

在J2EE中,通过过滤器Filter的编写,可以进行一些通用的验证处理,比如身份验证,字符集处理。

sails中的policy类似过滤器的功能,在路由分发到controller之前,可以对请求进行验证处理。

policy的编写在目录/api/policies/下,每个policy只提供一个对外的方法,这个方法就是执行相应的验证处理。

/**
 * /api/policies/isLoggedIn.js
 */
module.exports = function(req, res, next) {  
  if (req.session.user) {
    return next();
  }
  return res.forbidden('You are not log in.');
};
/**
 * /api/policies/isAdmin.js
 */
module.exports = function(req, res, next) {  
  if (req.session.user.isAdmin) {
    return next();
  }
  return res.forbidden('You are not admin.');
};

对过滤器的配置在/config/policies.js中。

/**
 * /config/policies.js
 */
module.exports.policies = {  
  ProfileController: {
      // Apply the 'isLoggedIn' policy to the 'edit' action of 'ProfileController'
      edit: 'isLoggedIn'
      // Apply the 'isAdmin' AND 'isLoggedIn' policies, in that order, to the 'create' action
      create: ['isAdmin', 'isLoggedIn']
  }
};

上述的配置就是,将指向ProfileController的请求先经过policy的验证,edit和create是ProfileController的两个action,指向edit的请求先验证isLoggedIn,指向create的请求需要验证isLoggedIn以及isAdmin。