我使用expressJS構建應用程序API。在這個應用程序中有一個公共部分和一個私人部分。ExpressJS使用相同的端點處理多個獲取路由
兩個部分需要顯示的用戶列表。但只有私人部分才能顯示完整列表。
我用express-authorize middlewar處理autorization。所以我定義了兩個授權:
'市民:用戶:列表'
和
'私人:用戶:列表'
在表達我有試着寫的路線是這樣的:
router.route('/users')
.get([passport.authenticate('jwt', { session: false }), authorization.authorizer.isPermitted('private:users:list')], (req, res) => {
getUserList(req, res);
})
.get([passport.authenticate('jwt', { session: false }), authorization.authorizer.isPermitted('public:users:list')], (req, res) => {
req.query.filter.roles.name = 'user'
getUserList(req, res);
});
但這不起作用。請求失敗,因爲第一次獲得未經授權,從未進入第二次。是否有意思讓這個作品?或任何其他技術。如果可能的話避免創建另一個端點像(router.route(「usersPublic」)
THX
編輯:
我重寫onDenied功能類似這樣的,並在該路徑的改變。
var authorizer = new authorizer.Authorizer(authorizer.options);
authorizer.options.onDenied = function (req, res, next) { next('route') };
authorizer.options.withSubject = function (req, res, done) {}
,似乎工作。但是,如果沒有途徑是有效的。我得到一個404錯誤,而不是403.什麼建議嗎?
EDIT2:
onDenied不應該在全球,但路由本身這樣
router.route('/users')..get([passport.authenticate('jwt', { session: false }), authorization.authorizer.onDenied((req, res, next) => next('route')).isPermitted('private:users:list')], (req, res) => {
getUserList(req, res);
});
router.route('/users')..get([passport.authenticate('jwt', { session: false }), authorization.authorizer.isPermitted('public:users:list')], (req, res) => {
req.query.filter.roles.name = 'user'
getUserList(req, res);
});
爲什麼不能你只需要在同一個塊中的兩個條件是什麼? –
我可以。但如果可能的話,想要處理與中間件的所有授權 – Scandinave
根據我的理解,這是不可能的。 –