express 权限控制问题,求优雅解决方案,谢谢
发布于 9 年前 作者 JChehe 9312 次浏览 最后一次编辑是 8 年前 来自 问答

我是下面这样实现权限控制的,但我觉得有点问题,如: ①每个路由都要写 前缀 /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

回到顶部