天天看点

Sail.js官方文档阅读笔记(五)——api/policies/ 目录5.1 总述5.2 用policies保护action和controller5.3 固定的policies

policies在文件中的目录位置如下图所示:

Sail.js官方文档阅读笔记(五)——api/policies/ 目录5.1 总述5.2 用policies保护action和controller5.3 固定的policies

5.1 总述

Sails中的policies是授权和使用控制的通用工具,它可以使你在运行一个动作之前执行一些逻辑,用来决定是否继续处理请求。最常见的用例便是为登录用户限制一些操作。

5.2 用policies保护action和controller

Sails有一个获取控制列表在config/policies.js目录下。这个文件用来将policies映射到action和controller中。

这个文件是描述性的,意味着它描述了应用的许可应该是什么样的,而不是它们是怎么工作的。这使得开发者更容易明白发生了什么,使当需要变更时应用更灵活。

这个文件是一个词典,它的属性和值依据policies会有所不同。

5.2.1 将policies应用于controller

样例如下:

module.exports.policies = {
  UserController: {
    // By default, require requests to come from a logged-in user
    // (runs the policy in api/policies/isLoggedIn.js)
    '*': 'isLoggedIn',

    // Only allow admin users to delete other users
    // (runs the policy in api/policies/isAdmin.js)
    'delete': 'isAdmin',

    // Allow anyone to access the login action, even if they're not logged in.
    'login': true
  }
};
           

5.2.2 将其应用于单独的行为

样例如下:

module.exports.policies = {
  'user/*': 'isLoggedIn',
  'user/delete': 'isAdmin',
  'user/login': true
}
           

5.2.3 以计划的动作使用policies

样例如下:

module.exports.policies = {
  UserController: {
    // Apply the 'isLoggedIn' policy to the 'update' action of 'UserController'
    update: 'isLoggedIn'
  }
};
           

或者

module.exports.policies = {
  'user/update': 'isLoggedIn'
};
           

5.2.4 全局policies

样例:

module.exports.policies = {
  '*': 'isLoggedIn',
  'user/login': true
};
           

5.3 固定的policies

Sails提供两种固定的policies可以被应用于全局,某个controller或者action。

true:公有访问

false:禁止访问

'*' : true 是对于所有controller和action的默认的policy。在应用中,对应不想暴露的动作,将它设定为false是一个很好的尝试。