中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

Node.js與Sails~方(fang)法攔截器policies

回到目錄

policies

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

一 首先定義一個過濾器(qi)(策(ce)略)/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();
};

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

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

  }
};

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

如(ru)果(guo)希望所有的controller的所有action都添加某個(ge)過濾(lv)器,我們(men)需要把策(ce)略寫在(zai)外面,如(ru)下面的代碼

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

上(shang)(shang)面(mian)對應全(quan)局的過濾器(qi)一般用在后臺管(guan)理(li)系統上(shang)(shang),但這(zhe)(zhe)種(zhong)(zhong)全(quan)局過濾器(qi)加上(shang)(shang)后,需要(yao)把登(deng)(deng)陸(lu),登(deng)(deng)出這(zhe)(zhe)種(zhong)(zhong)頁(ye)面(mian)排除掉,否則,你無(wu)法進行(xing)登(deng)(deng)陸(lu)頁(ye)了(le),哈(ha)哈(ha),代碼如下(xia)

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

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

模擬登陸

/**
 * 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)//模擬(ni)管(guan)理員登錄
    {
        req.session.user={isLogin:true,isAdmin:true}
        console.log(  req.session.user);
        return res.send("管理員登陸成功")
    }
};

第一次運行程序

用戶登陸

第(di)二次(ci)進行(xing)這個頁面,就正常顯示內容了

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

武術不分國界 :P

回到目錄

posted @ 2015-10-14 14:51  張占嶺  閱讀(2668)  評論(0)    收藏  舉報