# 权限说明 ## 一. 最高权限账号 用户名:myadmin 密码:123456 判断是否为最高权限的依据是id为1或者数据权限为值为1 DATA_SCOPE_ALL所有的数据权限 ## 二. 数据权限 数据的权限主要是根据sys_office 和sys_role来决定的 详细操作请参考:DataScopeFilters类 数据权限大概分为4种: 1:所有数据; 2:所在部门及以下数据; 3:所在部门数据; 4:仅本人数据; ### 原理: 1. 先获取到该人员拥有的角色最高的数据权限: 获取到4种权限中最大的数据权限 2. 通过部门表根据权限范围进行数据权限过滤: 详细如下代码 ```java if (DataScope.DATA_SCOPE_ALL == dataScopeInteger){ isDataScopeAll = true; } else if (DataScope.DATA_SCOPE_OFFICE_AND_CHILD == dataScopeInteger){ sqlString.append(officeAlias + SQL_ID + userOffice.getId() + "'"); sqlString.append(" OR " + officeAlias + ".parent_ids LIKE '" + userOffice.getParentIds() + userOffice.getId() + ",%'"); } else if (DataScope.DATA_SCOPE_OFFICE == dataScopeInteger){ sqlString.append(officeAlias + SQL_ID + userOffice.getId() + "'"); } else if (DataScope.DATA_SCOPE_SELF == dataScopeInteger) { sqlString.append(alias + "."+field+"= '" + userId + "'"); } // 如果没有全部数据权限,并设置了用户别名,则当前权限为本人;如果未设置别名,当前无权限为已植入权限 if (!isDataScopeAll && StrUtil.isNotBlank(sqlString.toString())){ return " AND (" + sqlString.toString() + ")"; } ``` ## 三. 操作权限 详情请参考PermissionService 针对操作权限提供了大致两种判断是否具备权限的方式; 1. 当前用户是否具有操作权限 2. 当前用户拥有的角色