前端页面内权限控制规范
201809更新
v-auth控制弹窗内元素渲染会出现首次渲染成功后,第二次打开弹窗为false的情况,导致权限判断失败,页面样式错位,所以无法在弹窗内使用该方法。
解决方法:因为只需要页面初次加载时判断用户有无功能权限,通过接口查询一次后赋值给data的xx属性,通过属性的值来判断。
1 | async created() { |
前端页面内权限控制规范
目前的权限系统支持到动作点的细粒度控制,前端支持前置判断权限从而控制节点的展示与隐藏,执行相关逻辑等。前端通过 mixin 混入权限控制模块进行判断和处理。
自定义组件需要单独import '@/mixin/auth',如果是已经引入了@/mixin的页面组件则不需要额外引入该模块。
该模块提供一个自定义指令v-auth和一个公共方法fCheckAuth,前者用来根据权限控制一个节点的展示或隐藏,后者通过该方法查询当前角色是否有某权限。
动作点管理
动作点统一添加到@/config/auth。动作点通过模块管理,值为后台刷新的动作点名。
1 | export default { |
v-auth
v-auth接收多种格式的参数。
传入字符串
可以传入一个形如'bill.CONFIRM_OFFLINE_PAYMENT'的字符串,指令会到配置中寻找对应的路径查询当前动作点是否有权限,如果没有权限,则移除这个 DOM。
注意:传入的是字符串'bill.CONFIRM_OFFLINE_PAYMENT',而不是bill.CONFIRM_OFFLINE_PAYMENT,后者会被框架当做组件的data值去获取。
传入对象
可以传入的是一个对象:
| 参数名 | 类型 | 解释 |
|---|---|---|
| auth | String | 逻辑处理同字符串参数 |
| hide | Boolean | 如果为true,则将其display属性置为none(而不是从 dom 中移除这个节点) |
| reverse | Boolean | 如果为true,则展示逻辑与正常相反,即无权限时展示该节点,有权限时移除这个节点 |
传入布尔值
如果传入的是一个布尔值且该布尔值为false,则移除这个 DOM。作用同v-if。
fCheckAuth()方法
使用this.fCheckAuth(auth)方法判断当前是否有auth权限,auth参数同v-auth自定义指令接收的字符串参数。
注意,这是一个异步方法。使用
1 | let valid = await this.fCheckAuth('bill.CONFIRM_OFFLINE_PAYMENT') |
或者
1 | this.fCheckAuth('bill.CONFIRM_OFFLINE_PAYMENT').then(valid => { |
判断是否具有相关权限。