# 权限说明
## 一. 最高权限账号
用户名: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. 当前用户拥有的角色