前端页面权限不同,显示不同内容的方法

一个页面有管理员和普通用户两种权限,不同的地方是管理员权限有个管理div块。
我想根据权限判断这个div块显不显示,现在有两个问题比较不清楚:

1.这个权限判断是前端完成还是后端完成;
2.如果仅仅是在页面上隐藏这块,会不会有安全隐患,业界通用的解决办法是什么。
阅读 22.4k
8 个回答

这个权限的问题交给后台吧。比如说每个用户都有相对应的权限等级,你从后台获取到这个等级之后根据这个等级来控制路由什么的都可以。最好别用隐藏,显示这样的方法,因为这样的话虽然隐藏掉的页面用户看不到,但是还是在这个页面上存在的。

1.如果你用了vue等框架,本身有类似于v-if的语法判断是否生成,不同于传统的是否隐藏。前端工程组件化方法是既能复用又能安全的最好方法。
2.任何后端语言渲染方法都可以替代这种隐藏方法,可以通过服务端渲染的方法规避问题中提到的安全问题。

嗯哼,做过好多RBAC的东东,大体说一下。

1.权限是最好放到后台的,验证过程由后台控制(除非你想做的很easy)。

2.如果html是后端用模板渲染,那么不存在隐藏的问题;如果完全用ajax来做,那么菜单最好用js来生成,菜单内容存到后台。

3.除菜单之外,如果有相同的用户类型使用同样的菜单,而细节权限不同,比如就个按钮能不能点。前台控制就好啦~

你的问题可以从两个角度进行解决:前端显示和后台安全控制,那么解决方法也应该从这两个角度进行解决。

前端显示

在用户登录进入到系统中的时候,其实已经确定了该用户的角色,因为角色只要两种,所以只要通过简单的判断即可知道是否要显示管理模块。

if(role == 'admin') {
    // 显示
}

后端安全控制

前端的显示都只是用户体验的问题,后端的控制才是真正的权限控制。对于管理模块的所以相关的接口,后端都需要进行授权验证。没有访问的权限,则返回错误信息,否则返回接口处理结果。

我觉得是前端完成判断的 至于第二个问题我不清楚

通常来讲,不应该管理员和普通用户使用同一个页面。如果你非要这么做的话,也是可以实现的。可以通过后端判断是否显示管理员的div。

1.权限必须是后端完成,你也不想别随便浏览器执行个JS,就是跨权限操作吧

2.没权限页面不显示操作暗流,外加,后端在执行action之前。动态验证当前用户是否有操作权限。

图片描述

这种功能用js实现会出现安全问题(XSS)。要使用spring-security框架,后端存取权限,前端设置控制权限的标签,没有相关权限的用户是看不到其它代码的(就是返回页面之前,通过权限标签过滤了)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题