管理系统的前端权限控制

问题:项目使用的是shiro框架处理用户登录权限,那么前端要如何配合后端完成系统的权限控制?

前端权限比较常见的就是RBAC基于角色的访问控制,基本思想是系统的操作权限不是直接授予具体的用户,而是在用户与权限之间,建立角色集合,每个角色对应一组相应的权限,一旦用户被赋予某种角色,那么用户便具有了此角色对应的操作权限。
这样做的好处在于不必每次创建用户都去分配权限集,只要分配用户对应的角色,相比于用户权限的变更角色的权限变更要少得多,这样可以简化用户权限管理的系统开销。

在angularJs构建的单页面应用中,要配合后台shiro框架,完成系统权限控制,整体来讲主要需要处理3处:
1,UI处理;根据用户拥有的权限,判断页面上的内容是否应该显示
2,路由处理;不允许用户通过URL访问没有权限访问的界面
3,http请求处理;当我们发送一个数据请求,如果返回的satuts是40X,则通常重定向到一个错误提示页面
前端要想实现以上权限控制,首先需要在应用初始化阶段,创建一个优先执行的service,在service内通过发送一个同步的ajax请求(同步操作避免后面加载出现问题),将后台shiro框架处理过的用户对象请求回来,这个对象中包括用户的角色数组roles,我们可以通过_.includes(roles,?)来判断用户具有的角色(?代表与后台事先沟通好的角色值,例如1代表管理员,2代表普通用户),然后在服务内创建角色判断函数便于其他模块调用,我们将这个service作为全变量使用,其他模块可以通过依赖注入的方式获取service内部角色判断函数(当然也可以通过$boradcast事件广播处理,这里我们未使用这种方法);
UI组件处理,依据判断出的用户权限进行显隐,这里我们仿造ng-if源码,编写指令用于处理UI组件的显隐(当然我们可以直接在UI上使用ng-if,然后UI对应的controller,通过依赖注入判断登陆用户的角色,但这种方法不易复用,不推荐);
路由处理,我们这边是将所有模块路由抽象成常量,然后在模块的路由常量内加入角色属性,然后通过遍历常量判断可以访问此模块的角色,以此来区分页面是否有权限跳转,当用户通过输入url进行访问页面时,由于不具备权限,页面将停留在当前界面。
Http处理,我们这边已经通过在UI页面控制了访问入口不同权限的显隐,也通过路由限制了输入URl访问页面,所以http这块未做特殊处理。

猜你喜欢

转载自blog.csdn.net/kf_qyl/article/details/79231710