列表數據權限用法
===
**目錄索引:**
- 功能說明
- 數據權限兩種編碼模式
- 數據權限規則篇
1. 當前用戶上下文變量
2. 建表規范(系統標準字段)
3. 組織機構郵編規則
- 案例一(行級別 – 限制demo用戶不能看admin的數據)
- 案例二(行級權限 - 登錄人只能看自己數據)
- 案例三(行級權限 - 登錄人可看下級所有人數據)
- 案例四(列級別權限 – 不同的人看到數據列表不同的列)
- 采用Minidao方式權限集成
1. 權限配置規則
2. 權限生成SQL規則獲取方法
# JEECG 數據權限用法
## 一、功能說明
列表數據權限,主要通過數據權限控制行數據,讓不同的角色有不同的訪問規則;
比如: 銷售人員只能看自己的數據;銷售經理可以看所有下級銷售人員的數據;財務只看金額大于5000的數據等等;
## 二、數據權限兩種編碼模式
### 數據權限控制分兩種模式(根據編碼風格)
**模式一:** 列表查詢采用hibernate方式編碼,hibernate實體,查詢采用Jeecg的查詢過濾器。
**實現原理:**數據權限規則,是通過查詢過濾器注入的,JEECG講數據權限規則以Hiberate方式注入到查詢條件中;該方式比較簡單,不需要額外編碼,直接權限配置即可;
**模式二:** 列表查詢采用minidao方式(純sql)編碼,此方式比較復雜需要專題介紹
**實現原理:**Jeecg會將數據權限規則,組織成純sql片段,放在request線程中,需要開發者,手工編碼注入查詢邏輯中,此模式復雜會有專題講解。
```
規則字段配置說明(非常重要):
模式一:[規則字段]對應著hibernate實體的字段,一般是駝峰寫法
模式二:[規則字段]對應著數據庫表的字段,一般是帶下劃線
③條件規則:大于/大于等于/小于/小于等于/等于/包含/模糊/不等于
④規則值:指定值 ( 固定值/系統上下文變量 )
```
## 三、數據權限規則篇
### 1.當前用戶上下文變量
注意:數據權限配置,規則值可以填寫系統上下文變量(當前登錄人信息),從而根據當前登錄人信息進行權限控制。
| 編碼| 描述 |
| -------- | ----- |
| sys_user_code| 當前登錄用戶登錄賬號|
| sys_user_name| 當前登錄用戶真實名稱|
| sys_date| 當前系統日期|
| sys_time| 當前系統時間|
| sys_company_code| 當前登錄用戶公司編號|
| sys_org_code| 當前登錄用戶部門編號|
規則值,配置寫法如下:#{sys_user_code}
### 2.建表規范(系統標準字段)
如果需要通過當前登錄人,進行數據權限控制,則業務表必須有以下系統標準字段;數據添加和編輯,jeecg會通過攔截器自動注入操作人的信息。
比如:創建人,創建時間,創建人所屬部門、創建人所屬公司,有了這些標準字段,就可以通過當前登錄人進行數據隔離控制;
| 字段英文名| 字段中文名|
| -------- | ----- | ---- |
| CREATE_BY| 系統用戶登錄賬號|
| CREATE_NAME| 系統用戶真實名字|
| SYS_ORG_CODE| 登錄用戶所屬部門|
| SYS_COMPANY_CODE| 登錄用戶所屬公司|
### 3.組織機構郵編規則
JEECG組織機構支持無線層級,上下級關系通過組織機構編碼實現,組織機構編碼規則類似郵編方式,看下圖;
郵編規則優勢: 郵編規則,上下級編碼固定規律,便于定位下級和上級;

## 四、案例一(行級別 – 限制demo用戶不能看admin的數據)
### 1.數據權限案例
通過權限控制,限制demo角色用戶,無法查看用戶列表中admin這條數據。

### 2.數據權限菜單配置
創建數據權限類型菜單(注意:列表訪問鏈接和數據請求鏈接不是一個,此為加載數據請求)
注意: 這里很容易配置錯誤,一定注意
用戶數據請求地址:userController.do?datagrid


### 3.數據權限控制規則配置
**配置1、條件規則為非自定義sql表達式**

填寫說明:
①規則名稱:隨意定義
②規則字段:[字段名稱]
**注意:
模式一:[字段名稱]對應著hibernate實體的字段
模式二:[字段名稱]對應著數據庫表的字段**
③條件規則:大于/大于等于/小于/小于等于/等于/包含/模糊/不等于
④規則值:指定值 ( 固定值/系統上下文變量 )
**例如:**
規則名稱:用戶數據限制
規則字段:userName
條件規則:不等于
規則值:admin
以上表單權限規則表示將動態追加sql條件: userName !=‘admin’的條件,即按照用戶賬號!=admin進行了數據權限控制。
**配置2、條件規則為自定義sql表達式,規則值為自定義sql的條件語句**
**例如:**
要想篩選年齡小于18歲且身高大于180的數據即直接配置規則值為:
age < 18 and height >180
其中age和height均為數據庫表字段名

### 4.數據權限授權角色
①菜單訪問授權
用戶管理菜單;
②數據權限授權
用戶列表數據數據菜單,數據規則權限授權;

### 5.測試數據權限效果
采用demo用戶(授權demo角色)登錄系統,訪問用戶列表,
效果如下,看不到admin用戶數據,說明權限生效

## 五、案例二(行級權限 - 登錄人只能看自己數據)
### 1.數據權限案例
通過登錄人賬號,進行數據權限過濾,限制銷售人員只能看自己的業務數據。
通過admin查看“列表標簽”功能如下(數據提前準備,分別采用demo、scott兩個用戶創建)

### 2.數據權限規則配置
控制請求: jeecgListDemoController.do?datagrid


### 3.數據權限授權角色
①菜單訪問權限
列表標簽菜單;
②數據權限菜單
Jeecg demo數據權限列表,數據權限規則授權;

### 4.測試數據權限效果
采用demo用戶(授權demo角色)登錄系統,查看菜單【常用實例-列表標簽】功能,只能看到自己的數據,說明權限生效。

## 六、案例三(行級權限 - 登錄人可看下級所有人數據)
### 1.數據權限案例
創建三個用戶scott、lisi、demo,設置demo、scott為銷售人員崗位,設置lisi為銷售經理屬于demo和scott上級,通過權限配置lisi可看下級和自己的業務數據;
采用admin用戶,查看“列表標簽”菜單,可以看所有用戶數據

### 2.數據規則配置原理
通過登錄人所屬部門,進行數據權限配置,查詢業務數據通過{創建部門編碼}字段,與{當前登錄人部門編碼}進行模糊匹配;
例如:當前登錄人所屬部門編碼:A01A02
因為JEECG設計組織機構編碼都是按照郵編方式組織上下級。

他的下級部門可以用SQL這樣表示:
sysOrgCode like ‘A01A02%’
### 3.基礎數據準備
①用戶分配組織機構
針對demo、scott用戶分配銷售人員崗位,針對lisi用戶分配銷售經理崗位

②組織機構規則如下,lisi為demo、scott上級。

③錄入業務數據
使用scott、demo兩個用戶錄入數據

### 4.數據權限規則配置


說明:通過模糊規則,類似 like ‘{當前登錄人組織機構}%’
### 5.數據權限授權角色
設置lisi用戶為經理角色,對角色分配數據權限

### 6.測試數據權限效果
通過lisi用戶登錄后臺,查看“列表標簽”功能,發現可以看到scott、demo用戶錄入的數據,說明數據權限生效。

## 七、案例四 (列級別權限 – 不同的人看到數據列表不同的列)
### 1.功能說明
列級別權限,主要針對數據列字段進行權限控制,從而實現不同角色可以有不同列字段查看權限;
### 2.列級別權限案例
通過列數據權限,限制demo角色,不能查看列字段[電話]
通過admin用戶查看“標簽列表”功能,界面如下:

### 3.列表頁面編碼規則
設置標簽參數field,對應頁面控制編碼;

### 4.列表行權限控件配置



工資查看權限錄入同之
### 5.列表行數據權限授權角色

### 6.測試列表行數據權限效果
采用demo用戶(授權demo角色)登錄系統,訪問“標簽列表”,
效果如下,已經看不到手機號字段,說明列表級權限控制成功。

## 八、采用Minidao方式權限集成
### 1.權限配置規則
說明:SQL方式數據權限規則一般采用Minidao實現數據操作,當然也可以是其他純SQL方式,配置對應數據庫表的字段,非實體字段

### 2.權限生成SQL規則獲取方法
通過工具類org.jeecgframework.core.util.JeecgDataAutorUtils

通過方法:JeecgDataAutorUtils.loadDataSearchConditonSQLString(),可以直接獲取配置的權限對應的sql規則。
- 總體介紹
- 快速了解
- 平臺優勢
- 技術支持
- 社區榮譽
- 開發環境準備
- JEECG私服Maven
- 代碼結構說明
- 入門開發環境搭建
- 開發工具
- 代碼生成器使用
- GUI代碼生成器
- Online代碼生成器
- P3插件代碼生成器
- 代碼生成器配置
- 功能介紹
- 權限開發手冊
- Online開發權限
- Online表單訪問規則
- 列表按鈕權限控制
- 列表數據權限控制
- 頁面表單權限控制(一對多表)
- 頁面表單權限控制(單表)
- 其他
- 二級管理員手冊
- 接口權限配置
- 平臺權限設計總覽
- 編碼開發方式
- 列表按鈕權限用法
- 列表數據權限用法
- 數據權限自定義SQL
- 表單權限用法
- UI標簽庫文檔
- AuthFilter(頁面權限標簽)
- Autocomplete(自動補全標簽)
- BaseTag(樣式和JS引入標簽)
- Choose(彈出選擇標簽)
- ComboTree(下拉樹形選擇框)
- Datagrid(數據列表標簽)
- DepartSelectTag(部門樹選擇標簽)
- DictSelect(數據字典下拉選擇框)
- FormValidation(表單提交及驗證標簽)
- HasPermissionTag(頁面權限標簽)
- Menu(左側菜單生成標簽)
- MutiLang(國際化標簽)
- OrgSelectTag(部門樹列表選擇標簽)
- SelectZTree(Ztree樹控件)
- Tabs(選項卡父標簽)
- TreeSelectTag樹分類標簽
- Upload(上傳標簽)
- UserSelectTag(用戶選擇標簽)
- WebUploader(上傳標簽)
- 查詢構造器
- 查詢過濾器
- 高級查詢構造器
- 專題功能介紹
- 國際化使用
- 多數據源使用
- 定時任務
- 平臺JWT接口文檔
- 消息中心
- Online在線開發
- Online二次開發
- Online代碼生成
- Online唯一性校驗配置
- Online查詢機制(數據權限)
- Online樹形表單配置
- Online表單填值規則
- Online表單對外接口
- Online表單控件
- Online表單配置
- Online表單高級應用
- Online報表開發
- Online圖形報表配置
- Online數據報表配置
- Online移動報表配置
- 自定義表單設計
- 自定義表單權限
- 列表空間權限控制
- 功能介紹
- 常規控件權限控制
- 自定義表單配置
- 自定義表單二次開發
- 自定義表單控件
- 自定義表單數據源
- 自定義表單模板
- 自定義表單配置
- 自定義表單高級應用
- 表單數據維護
- 附錄小技巧
- datagrid擴展屬性用法
- Formvalid新增屬性tiptype的使用
- JEECG單點集成文檔
- Jeecg定時任務開發
- JEECG常見問題貼
- Redis與Ehcache切換文檔
- Toolbar自定義js參數規則
- UI標簽規則
- 列表多表頭的設計
- 列表拓展字段展示
- 列表自定義查詢條件
- 員工入職開發規范文檔V1.0
- 數據列表合計功能
- 登錄權限攔截器排除方法
- 組織機構導入功能使用說明
- 表單字段重復校驗方法
- JEECG新技術
- 新版UI技術方案