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
文章列表