文章出處

回到目錄

policies

sails的方法攔截器類似于.net mvc里的Filter,即它可以作用在controller的action上,在服務器響應指定action之前,對這個action進行攔截,先執行policies的策略,當條件通過,會next()它,繼續執行本方法,當條件不滿足時,你可以終端這個請求,在sails里,policies也經常被用在權限判斷上,如登陸用戶可以訪問某個action,管理員權限可以訪問指定action等等。

一 首先定義一個過濾器(策略)/policies/adminAuth.js

/**
 * adminAuth
 * Created by zzl on 2015/10/14.
 */
module.exports = function (req, res, next) {
    if (!req.session.user.isAdmin) {
        return res.send("you are not administrator!");
    }
    next();
};

二 在策略配置項里為指定的controller添加指定的策略/config/policies.js

module.exports.policies = {  
  testController:{
      '*': 'sessionAuth',
      'admin':['adminAuth']

  }
};

上面的代碼*表示test控制器里的所有action都會被添加上sessionAuth這個過濾器,而第二行 'admin':['adminAuth']表示為admin這個action,添加adminAuth這個過濾器,它使用[]包含,表示一個action可以有多種過濾器去修飾!

如果希望所有的controller的所有action都添加某個過濾器,我們需要把策略寫在外面,如下面的代碼

module.exports.policies = { 
    '*': 'sessionAuth',//all controller action
};

上面對應全局的過濾器一般用在后臺管理系統上,但這種全局過濾器加上后,需要把登陸,登出這種頁面排除掉,否則,你無法進行登陸頁了,哈哈,代碼如下

module.exports.policies={ 
    '*': 'sessionAuth',//all controller action
    commonController:{
        '*':true//不走全局*過濾器
    }
}

三 直接運行代碼,你的test控制器下的所有action都需要進行登陸后才可以訪問,而admin這個action需要是有管理員權限的用戶才可以訪問,下面做了一個簡單的測試

模擬登陸

/**
 * Created by zzl on 2015/10/14.
 */
module.exports={
    login:function(req,res)//模擬用戶登陸
    {
        req.session.user={isLogin:true}
        console.log(  req.session.user);
        return res.send("用戶登陸成功")
    },
    adminLogin:function(req,res)//模擬管理員登錄
    {
        req.session.user={isLogin:true,isAdmin:true}
        console.log(  req.session.user);
        return res.send("管理員登陸成功")
    }
};

第一次運行程序

用戶登陸

第二次進行這個頁面,就正常顯示內容了

通過這幾篇sails的文章,我們應該有種體會,那就是所有技術都是相通的,可能代碼寫法不一樣,但是思想上是保持一致的,哈哈!

武術不分國界 :P

回到目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()