权限需求
禅道编号346 http://chandao.sxfax.com/zentao/task-view-346.html
现有权限只能支持到菜单,需要修改支持到按钮,增删改查,同时要限制到数据级别。不同的业务人员只能看
到自己做的单,领导可以看到所有的数据,渠道经理可以看到他所管辖业务员的单。主管可以看到下面业务员
的单。
需求分解
- 页面层权限控制(tab页面可以按配置权限来判断是否显示,支持菜单合并功能)
- 按钮层权限控制(只给某些角色某些权限按钮,其他无此权限按钮的角色进入不可见,即使通过非正常手段可见也不可调用接口)
- 数据权限控制(高层可一览无余,底层只可孤芳自赏)
影响范围
- 权限控制需要前后端配合使用,修改后可能会因为某些角色配置没有分配好,可能会影响正常的页面或者按钮的显示和接口调用
总体设计概要
- sl_menu表新增一个promise字段和一个type字段,type表示控制对象为页面还是按钮 。promise为按钮权限的别名(也可以跟页面公用别名字段,这样就不需要promise字段了)
- 新增一个权限配置的页面
- 按钮需要添加到当前菜单目录下
- 需要配置一个级别编码与菜单名字的映射放到前端配置文件(比如 1301表示小贷业务查询 1301对应SmallLoanBusiness,则前端的权限按钮写法为按钮部分为 <promise data-hasPromise="1301:add" >需要控制权限的部分</promise>,对应模板部分为<#promise hasPromise="1301:add">需要控制权限的部分<#promise>)
- 通过继承GeneralVarTagBinding类来实现标签设计,全局定义好权限标签
- 前端模板页面通过权限标签来判断所包含的内容是否需要做权限判断,通过hasPromise来判断是否可显示。
- 对于不是模板的页面(js打开的弹出框,是没有办法通过页面渲染的方式来控制权限按钮)需要通过data-promise属性来判断是否有权限,弹出页面的方法中包装一个遍历按钮并且遇到权限标签校验权限判断是否显示,这样可以尽量避免修改原来代码。
- 数据权限可以考虑通过工具包装sql语句的形式或者Dao拦截器方式实现,如果考虑要做数据权限,则权限配置则需要接入业务人员管理
数据表相关设计sl_menu
列名 |
类型 |
长度 |
注释 |
promise |
String |
64 |
权限别名 |
type |
String |
1 |
类型0 菜单,1按钮 |
编码要求
- 权限需要做前后端判断,防止非法调用不能调用的接口
- 接口校验异常时候,也需要隐藏按钮,尽量不留非法操作的入口
- 按钮控制尽量使用程序自动校验方式校验,防止人为遗漏
异常情况及处理
- 获取按钮权限可能出现异常,同样需要隐藏按钮
- 菜单权限更新保存异常,捕获异常,提示失败