大家好,小弟最近遇到的问题是,不同的用户有不同的权限,这个权限的判断原理是,直接将每个用户能访问的地址,放到数据库中,当用户登陆的时候,会首先根据数据库中的对应权限,来显示相应的菜单!然后在拦截器中拦截所有请求并分析请求的地址是否在数据库中有匹配,但是现在有一个问题就是
虽然这样能达到权限控制的问题,但是前台并不能智能提示,权限不足!!!被拦截器拦截到后如果没有该权限我就直接返回false,这样的效果就是点击了按钮,但是没有效果!
我现在想到的解决方案就是,每次请求的时候,都在回调函数中判断一次返回值,例如:如果返回值为3则,提示权限不足!但是现在项目中这样的请求太多了,如果每一个都手动判断一次,实在是太麻烦,而且不利于以后新功能的研发!不知道有没有同一的方案,能够保持当前的操作页面不变,还能弹窗提示权限不足呢??(框架用的是SpringMVC+MyBatis+EasyUI)
大家讲道理2017-04-10 15:07:59
我来简述一下我们目前这个架构是如何处理的:SpringMvc + Hibernate + Bootstrap
对于权限系统而言,我们拦截的本质其实就是URI,也就是我们所谓的链接,对于菜单而言一个菜单通常对应的是一个页面,而按钮对应的就是一个功能,在权限架构中要求做到针对不同的用户显示不同的按钮,也就是只有拥有这个权限的人才可以看到这个按钮,也就不存在你说的那个问题了,只会存在用户强行打路径的问题
针对用户强行打路径或者是URI请求问题:首先我们后台可以知道这个用户没有权限访问此路径,在我们的项目中访问页面和数据是分开来的,也就是get方法只能取到页面(当然也能从这个get方法从后台传递数据到前台),post只能用作ajax请求,只会返回json数据,那么当用户没有权限的访问的时候我们会抛出一个没有权限的异常,此时下一个处理就是“默认的异常处理中心”,此时再根据请求的方法判断我当前是要抛出一个页面还是一个json数据,抛页面的方法相对简单,就不描述了。
针对post方法抛异常的处理: 我们会返回给前端一个json数据,前端处理如下:
首先我们会有一个统一的数据格式例如:
{
code: '403',
message: '您当前没有权限操作此功能',
data : {
.....
}
}
通常我们会封装一系列的js,像我们就把post给封装了起来,我们针对这个数据格式做了处理,例如,
callback(data) {
if(data.code == '200') {
//进行展示数据: showData(data);
} else if(data.code == '403') {
//弹窗之类的提示:showDialog(data.message);
}
}
这样就基本上能够处理你说的那些问题了。
PHP中文网2017-04-10 15:07:59
将用户访问的地址存放到数据库中,每个用户都需要记录访问地址!!
为可不考虑引入角色的概念呢?关于权限拦截,可以在SPRINGMVC
中加入拦截器可以实现你想要的效果,SPRINGMVC+EASYUI
的案例网上很多,可以找些参考一下。
高洛峰2017-04-10 15:07:59
由于你每次请求前都不知道是否有权限,决定了你必须要根据返回结果来判断是否有权限,写回调是一种方法。
也可以按照大家的意思先判断是否有权限,可以考虑Ajax 的 beforeSend 方法或complete 、ajaxComplete 完成后触发。