snowy框架
用戶登錄
接受前端傳來的用戶名,密碼,租戶驗證碼,驗證碼。校驗驗證碼,查看是否開啟多租戶功能。
然后就是校驗賬號和密碼,判斷傳入賬號和密碼是否為空,空就異常,根據賬號查詢用戶,不存在拋異常。賬號存在,獲取賬號的passwordhashvalue值,將得到的密碼解密,將解密后的密碼進行hashvalue處理,然后進行判斷。
登錄,要查看狀態不能為停用狀態,然后構建登錄用戶信息(員工信息(構建登錄用戶時候沒有查詢附屬機構id,職位id),首先會獲取全部的菜單id,然后根據用戶id和角色id,查詢出自己的數據范圍。角色信息,權限信息,應用信息,數據范圍信息),然后使用JWT工具類構建token,將登錄信息緩存在redis中,過期時間為兩個小時。然后將用戶登錄的時間和地址進行更新。寫入日志。設置SpringSecurityContext上下文(之后獲取用戶就很簡單),判斷是否單用戶登錄(獲取redis中所有用戶的登錄信息,刪掉賬號名相同,但是登錄用戶的UUID和剛生成的不同的)。
默認app:首先判斷自己擁有的菜單編碼,查看是否有默認激活的應用(active=Y),將這個放在userAppDictlist的第一個,否則就按照獲取菜單編碼的第一個作為首個app0。
app和菜單的關系,先通過角色獲取菜單代碼集合,菜單中的application對應這app中的code。超級管理員只能獲得系統權重菜單,不能獲取業務權重菜單。
由用戶id,菜單id集合和appcode獲取該用戶的菜單樹。
用戶退出
- 從request中獲取到token,request中會將token進行封裝,檢驗token,獲取到payLoad中的信息UUID信息,判斷redis中的uuid和生成的uuid是否相同。從redis中將key的信息進行刪除。
新增:
如果不是自己所擁有的數據范圍,則不能夠添加該范圍內的用戶。首先會先給用戶賦一個初始密碼,然后查看用戶是否設置密碼,設置就覆蓋掉HashValue,將手機號敏感加密使用SM4,然后保存用戶信息。同時,把用戶id,作為參數傳給員工id,查看是否存在這個用戶,沒有就設置為null,然后將SysEmpParam中的參數copy給emp表,然后查看這個員工的附屬機構,刪除之前的附屬機構,重新賦值,職位也是一樣。
編輯:
和新增差不多,相當于新增了。新增時直接給了狀態,編輯是先讓狀態為null,然后在更新狀態。
刪除
刪除用戶的時候,將用戶信息中狀態設置Delete,根據用戶id刪除員工信息表中的員工表(里邊有機構),員工附屬機構職位表,員工職位表信息,然后根據用戶id,刪除用戶角色和數據范圍。
授權角色
授權角色會先去查看角色權限,如果沒有則不能授權,授權方式就是先刪除之前的角色,然后重新賦值。
授權數據
授權數據會先去查看數據權限(就是說自己的機構是否包含想要賦值的機構),沒有則不能賦值,授權方式也是先刪除之前的數據范圍,然后重新賦值。授權數據就相當于授權職位。
app:
激活功能:將激活的改為未激活,然后將想要激活的active改為Y。
構建樹:
- 獲取父節點(0L)
- 根據父節點獲取子一級節點
- 然后根據子一級節點進行遞歸。
刪除app時,應查看該app下是否有正常的菜單,有則不能刪除。
菜單:
-
創建目錄,校驗傳過來的參數。
-
重新設置pids,因為是目錄所以pids=[0],
-
設置為啟用狀態
- 創建菜單,校驗參數
- 從pid獲取到pids,然后添加進去
- 設置啟用
- 創建按鈕,校驗參數,包含:,\
- 從pid獲取到pids,然后添加進去
- 設置啟用
刪除就是級聯刪除,獲取子節點所有的集合,然后設置為delete
修改的時候不能讓自己選擇自己,否則無限循環,也不能讓自己成為父節點的父節點。
獲取系統菜單樹,根據application獲得所在的菜單,然后構建樹,供增加和修改時查看父節點。
切換菜單,獲取角色id組合,由角色id組合得到菜單id集合,
員工
員工表包含員工id,機構id,機構name
機構表,包含pid和pids
職位表:職位id和name
員工職位表:員工id,職位id
員工附屬機構職位表:員工id,機構id,職位id
刪除機構時,判斷是否有員工,
員工可以添加附屬機構,
機構:
新增時,首先檢驗參數,不是管理員登錄時,不能夠添加父節點(0L),添加子節點時也要去數據權限校驗(檢驗添加的節點是否在自己權限范圍內)。
刪除時,會先將所有的子節點放到list中,然后校驗登錄用戶的數據區權限包不包括這些刪除的節點。如果機構下有員工不能刪,附屬機構下有員工也不能刪除。沒有的話就級聯刪除信息。
修改的時候,首先校驗登陸人的datascope是否包含操作的公司。檢驗參數。如果修改了別的地方的信息,去別的表中修改信息。然后將所有的子節點進行更新。
角色包含著菜單和數據。
用戶被授權角色就可以有相應菜單和角色中包含的部分或全部數據
角色:
刪除角色的時候,將狀態改為2,然后刪除該角色對應的數據范圍(本人數據,自定義數據),刪除用戶角色中間表的信息,刪除角色菜單表中數據
授權菜單時,首先應該刪除原有的菜單-角色表中數據,然后新增。
授權數據范圍時,如果授權為全部,沒權限。如果是自定義,查看是否在自己權限范圍內。授權數據時,也是先刪除原有數據范圍,然后賦新值。
角色也有自己的數據范圍
職位
刪除職位的時候,判斷該職位和該員工附屬職位下是否有員工,有則不能刪除,要將員工-職位表中數據一并刪除。
area
只有個查詢方法。
consts
添加系統配置時,會將配置放到ConstantContext中,方便之后獲取。
刪除系統配置時,會去查看狀態是否為Y,不是就可以刪除,然后刪除對應的Context中內容。
修改時,不能修改狀態,編輯過后,將新的內容放到context中。
timer,sms,oauth,notice,monitor,log,file,emp,email,dict,consts,area,
DictType
字典類型下有個字典,通過字典類型id獲得字典值。
刪除的時候會將字典類型下的字典也會刪除。
字典樹,獲取字典類型,然后設置字典類型為pid=0,然后查找字典值,pid為字典類型的id。,然后經過doTreeBuild()。
DictData
一樣。
email功能沒成功好像是因為過濾問題。
file
使用的是@Resource,按照名字查找實例@Bean,能找到實例Bean的名字,然后就調用實例@Bean。
上傳文件的流程:
- 生成id,獲取文件名稱,獲取后綴,后綴不能為空,將三個加起來生成最后的名稱。
- 將文件轉化為byte[],通過storageFile()方法在指定位置創建文件
上傳文件時候,獲取的默認地址是在調用構造器的時候初始化了。
monitor
在線用戶列表:從redis中獲取key所對應的value。
強制退出:獲取登錄用戶的id,然后清楚登錄該用戶的redis信息,加入退出日志。
Notice
已收:根據當前用戶id去查詢所有沒有被刪除的信息。
這里寫自定義目錄標題
- 用戶登錄
- 用戶退出
- 新增:
- 編輯:
- 刪除
- 授權角色
- 授權數據
- app:
- 菜單:
- 員工
- 機構:
- 角色:
- 職位
- area
- consts
- DictType
- DictData
- file
- monitor
- Notice
總結
- 上一篇: 怎样调用通达信l2行情接口?
- 下一篇: 《C语言程序设计教程》(一)