天天看點

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