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是一个很好的尝试。