項(xiàng)目中需要完成權(quán)限管理惶楼,主要的實(shí)現(xiàn)要求是右蹦,服務(wù)器啟動(dòng)從MySQL中讀取權(quán)限,存儲(chǔ)到MongoDB中歼捐,用戶登錄時(shí)何陆,從MongoDB中讀取所在角色的權(quán)限代碼,根據(jù)讀取到的權(quán)限代碼進(jìn)行權(quán)限控制豹储。
其中MongoDB的操作通過(guò)mongoose完成贷盲,首先是建立mongoose連接。
角色權(quán)限的映射在MongoDB中按照如下的模型存儲(chǔ)剥扣,schema 定義的是存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)巩剖。在mongoose里面,schema用JSON object作為定義钠怯。Model是經(jīng)過(guò)Schema構(gòu)造來(lái)的模型佳魔,除了Schema定義的數(shù)據(jù)庫(kù)骨架以外,還具有數(shù)據(jù)庫(kù)行為模型晦炊,增刪改查都要通過(guò)這個(gè)Model實(shí)現(xiàn)鞠鲜。
服務(wù)器啟動(dòng)時(shí),首先清除MongoDB中的原有數(shù)據(jù)刽锤,然后重新讀取數(shù)據(jù)庫(kù)中的權(quán)限到MongoDB镊尺,因?yàn)闆](méi)有找到直接能過(guò)清空的操作,于是就用find和remove把所有查找到的數(shù)據(jù)刪除并思。存儲(chǔ)時(shí)使用的是mongoose的save函數(shù)庐氮,這里前端權(quán)限只存儲(chǔ)權(quán)限代碼,后端權(quán)限比較復(fù)雜宋彼,寫(xiě)的有點(diǎn)亂就不貼了弄砍,主要是在后端權(quán)限中要實(shí)現(xiàn)權(quán)限層級(jí)與數(shù)據(jù)域,舉例對(duì)于醫(yī)院來(lái)說(shuō)输涕,權(quán)限層級(jí)可能包括全院層級(jí)音婶,科室層級(jí),個(gè)人層級(jí)莱坎,在科室層級(jí)中衣式,可以通過(guò)數(shù)據(jù)域來(lái)控制他有哪幾個(gè)科室的權(quán)限。
用戶登錄時(shí),從MongoDB中讀取權(quán)限碴卧,存到session中弱卡,到具體的權(quán)限分配時(shí),從session中讀取權(quán)限進(jìn)行控制住册。