# 權限說明
## 一. 最高權限賬號
用戶名: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. 當前用戶擁有的角色