express 权限控制问题,求优雅解决方案,谢谢
我是下面这样实现权限控制的,但我觉得有点问题,如:
①每个路由都要写 前缀 /system_admin/
以适配控制权限的中间件,非常冗余;
②系统有多种角色,如果一些路由只有部分角色才有权限访问的话,该又如何写呢?
router.all("/system_admin/*", function(req, res, next) {
if (req.session.user.role == 0) {
return next();
} else {
return next(new Error("权限不足"))
}
})
router.get("/system_admin/system_user_list", system_admin.system_user_list)
router.get("/system_admin/doctor_list", system_admin.doctor_list)
router.get("/system_admin/patient_list", system_admin.patient_list)
router.post("/system_admin/add_system_user", system_admin.add_system_user)
router.post("/system_admin/edit_system_user", system_admin.edit_system_user)
8 回复
const adminRouter = require('express').Router();
router.use('/system_admin', adminRouter);
adminRouter.get("/system_user_list", system_admin.system_user_list);
...
把你的中间件改一改, 放到具体路由上, 像这样.
router.get('/add_system_user', middleware(), system_admin.add_system_user)
@winky 这种方式比较巧妙,有点绕
@magicdawn 嗯,这样路由就像继承。
@winky middleware()里面怎么实现分到具体路由的?
@imhered 我上面那样的写法就是只对该条路由起作用, 具体中间件怎么写,你可以参考 https://github.com/jackhutu/jackblog-api-express/blob/master/server/api/user/index.js 里面的写法.
@winky 好的,谢谢!
可以用这个Express-authz插件,Express专门的权限管理插件,支持RESTful:https://github.com/node-casbin/express-authz