角色权限管理解决方案
发布于 10 年前 作者 silianlinyi 6332 次浏览 最后一次编辑是 8 年前

【需求】: 用户表:username,password,email,roleType(角色类型,0:管理员,1:文章编辑) 当管理员登录时,菜单上有一个“添加编辑”按钮,管理员可以添加编辑,而编辑登录时,没有这个按钮 这两种情况,界面展示上有所区别,管理员登录时多了一个"添加编辑"按钮。

像这种类型的需求,一般是如何处理的?有谁可以简单地讲解下,万分感谢!

9 回复

后台传递一个标识,前端用js处理。

例如: res.render(“admin/index”); res.render(“admin/postList”); res.render(“admin/newPost”); res.render(“admin/editPost”); 按照你说的,是不每次在render的时候都传递一个标识roleType? 例如: res.render(“admin/postList”, { roleType:1 }); 这样做感觉很麻烦,有没有更好的解决方案?

@silianlinyi 像这种权限设置不能用JS处理,否则只要有人打开页面标签一样可以操作,要在模版引擎输出的时候根据权限控制是否输出按钮,还有一个就是在后台需要在对这个编辑文章的用户进行判断,查看他是否有权限修改,这样做最安全

我是把用户和角色分开来管理的,然后用角色判断操作,下面是使用时代码片段

var roles = user.getRoles(req.session.user);
if(roles.indexOf('admin') < 0) {
    console.log('没有权限');
}

@silianlinyi 之前没用模板引擎时是用js处理,但是这样js代码奇多无比(可能只是我修业不精) 现在用模板就在render时多传一个或几个用于判断的标识值,虽然每个render都要加好想有点繁琐 但这样前端页面会清晰不少,js代码数量锐减

nodejs有相关好用的角色权限模块吗?

按钮貌似只能通过模板引擎的输出进行控制了吧 然后对于添加编辑的这个路由直接进行路由的过滤。。 router.all(’/addeditor’, isAdmin);

还是路由过滤吧~一般这样还简单点

我大致的思考:1,把各个功能都单独作为权限模块划分。2,划分用户组,每个用户组有一个权限掩码(二进制,每一位对应一个功能)。3,在各个模块显示之前,通过用户组的权限掩码来控制模块是否显示。

这么做麻烦在于去划分功能模块,为各个模块都要添加权限验证。好处在于新建用户组,原有的代码完全不需要修改!

回到顶部