2016-02-15 62 views
1

比方說,我想限制某個資源對某些符合條件的人羣的訪問。我現在正在做的是定義一個授權中間件來檢查req.user是否滿足這些條件。ExpressJS授權用戶使用中間件?

module.exports.requiresCondition = function(req, res, next){ 
    Model.findOne({condition: condition}, function(err, model){ 
     //check if various conditions are met. If not, return 401 
     res.locals.model = model; 
     return next(); 
    } 
} 

我有這樣的問題是,我不能選擇什麼樣的數據來預測,因爲這跟從路由可能使用模型的不同部分。這意味着我必須每次都得到整個模型,隨着文檔變得越來越大,效率越來越低。當然,我只需在中間件中查詢一次我需要在實際控制器中授權和查詢的密鑰,但這看起來並不是特別有效。有沒有更好的方式來授權用戶?

+0

使用護照本地模塊 –

+0

我正在使用護照。但有些資源只屬於某些用戶,我不希望其他人能夠訪問它們。 – user36322

回答

0

如果不同的路由需要不同的數據,你可以模塊化你的中間件層。 composable-middelwarehttps://www.npmjs.com/package/composable-middleware是完美的。

因此,讓我們說你有幾個途徑:

import compose from 'composable-middleware'; 
 

 
router.get('/type1/:id', compose().use(Auth.hasAppAccess()).use(TypeMiddleware.getType1()), ctrl.doType1); 
 
router.get('/type2/:id', compose().use(Auth.hasAppAccess()).use(TypeMiddleware.getType2()).use(TypeMiddleware.evenMoreOperations()), ctrl.doType2);

然後中間件本身

import compose from 'composable-middleware'; 
 

 
export function isAuthenticated() { 
 
    return compose() 
 
     .use(function(req, res, next) { 
 
      //do your stuff here 
 
     }) 
 
} 
 

 
//similarly for other middelware functions