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