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是一個很好的嘗試。