权限
权限系统是一个系统中非常重要的部分,不同的角色对于系统拥有着不同的操作权限或者操作界面或者其他。本文主要记录若依框架的权限使用。
效果
一个具体案例:假如我们给超级管理员一个导出
的权限,普通角色则没有导出
权限,即:
具体实现
准备工作
定义角色
进入角色管理
,添加自己的角色,具体步骤略
添加用户
进入用户管理
,添加自己的用户,指定相应的角色,具体步骤略
至此,使用权限的准备工作已经做好。同时,确保你使用过代码生成
模块中的SQL
文件将相应的权限数据导入了数据库中。就比如这里的导出
功能,你可以进入菜单管理
来查看或者直接查看数据库
代码实现
前端
1 2 3 4
| <el-button v-hasPermi="['qljsystem:contract:export']" v-hasRole="['admin']">导出 </el-button>
|
使用权限字符串 v-hasPermi
1 2 3 4
| // 单个 <el-button v-hasPermi="['system:user:add']">存在权限字符串才能看到</el-button> // 多个 <el-button v-hasPermi="['system:user:add', 'system:user:edit']">包含权限字符串才能看到</el-button>
|
使用角色字符串 v-hasRole
1 2 3 4
| // 单个 <el-button v-hasRole="['admin']">管理员才能看到</el-button> // 多个 <el-button v-hasRole="['role1', 'role2']">包含角色才能看到</el-button>
|
后端
1 2 3 4 5 6 7 8 9
| @PreAuthorize("@ss.hasPermi('qljsystem:contract:export')") @Log(title = "合同导出", businessType = BusinessType.EXPORT) @GetMapping("/export") public AjaxResult export(QljContract qljContract) { List<QljContract> list = qljContractService.selectQljContractList(qljContract); ExcelUtil<QljContract> util = new ExcelUtil<QljContract>(QljContract.class); return util.exportExcel(list, "qljcontract"); }
|
数据权限示例
1 2 3 4 5 6 7 8
| @PreAuthorize("@ss.hasPermi('system:user:list')")
@PreAuthorize("@ss.lacksPermi('system:user:list')")
@PreAuthorize("@ss.hasAnyPermi('system:user:add,system:user:edit')")
|
角色权限示例
1 2 3 4 5 6 7 8
| @PreAuthorize("@ss.hasRole('user')")
@PreAuthorize("@ss.lacksRole('user')")
@PreAuthorize("@ss.hasAnyRoles('user,admin')")
|
表格字段权限控制
由于目前若依框架没有提供,因此使用v-if
和全局判断函数来手动设置
一、前端字段设置
1 2 3 4
| <el-table-column label="合同号" prop="contractNum" v-if="checkRole(['admin'])"/>
<el-table-column label="合同号" prop="contractNum" v-if="checkPermi(['system:user:add', 'system:user:edit'])"/>
|
二、导入全局判断函数
1
| import { checkPermi, checkRole } from "@/utils/permission";
|
三、设置函数
1 2 3 4 5 6
| export default{ methods: { checkPermi, checkRole } }
|
表格数据权限控制
前一个表格字段权限控制控制的是列
,本部分介绍下我是怎么实现行
的权限控制
效果
如何实现
思路:获取当前登录用户,如果角色为技术人员,则筛选出权限内的数据
获取登录用户的角色
1 2 3 4
| loginUserRoleIs(param) { return this.$store.state.user.roles.indexOf(param) !== -1 },
|
筛选函数
此段代码可以参考本文
1 2 3
| filterArray(aim, reg) { return aim.filter(item => item.docType === reg) }
|
筛选数据
此段代码可以参考本文
1 2 3 4 5 6
| getContractDocList() { getContractdoc(this.formData.id).then(response => { this.docList = this.loginUserRoleIs('tech') ? this.filterArray(response.data, 2) : response.data; this.total = this.docList.length; }) },
|
常见问题
提示您没有数据权限
这种情况都属于权限标识配置不对,需要在菜单管理
配置好权限标识(菜单&按钮)
确认此用户是否已经配置角色
确认此角色是否已经配置菜单权限
确认此菜单权限标识是否和后台代码一致
如参数管理
后台配置@PreAuthorize("@ss.hasPermi('system:config:query')")
对应参数管理权限标识为system:config:query
注:如需要角色权限,配置角色权限字符 使用@PreAuthorize("@ss.hasRole('admin')")