1,用戶表用戶;
2.角色表;
3.菜單;
4.角色菜單權限表role _ menu
5.用戶菜單權限表user _ menu
如圖所示:
根據用戶角色進行權限分配,並將權限分配給用戶;註意菜單中按鈕(增加、刪除、修改)的權限放在中間表格(user _ menu);
1.添加用戶時,必須根據用戶的角色分配權限。壹定要分批添加。批,批,批,重要的事情說三遍,不要查詢角色權限,然後循環for,效率太低;
SQL如下所示:
插入到sys_user_menu(UserId,MenuId,DelPower,?UpdPower,?InsPower,?ViewPower)
從sys_role_menu中選擇#{userId} UserId,MenuId,1 DelPower,1 UpdPower,1 InsPower,1 ViewPower其中RoelId = #{roleId}
UpdPower默認可用,所以都是1,這樣可以根據角色查詢直接添加權限,響應時間大大提高;
2.修改用戶角色時,記得重新分配用戶權限!這個不能忘,可以用上面的方法;
商業方法:
如果角色沒有被修改,就不需要重新分配權限,所有的userRole都被重置為null。如果角色被修改,原始權限將被刪除並重新分配。
3.最後,優化的時間是根據用戶查詢權限。這是我壹開始做的,查詢角色權限和用戶權限,返回前端處理。結果就很卡,基本上要三四秒,
解決,壹步到位;查詢會返回所有數據。
以下SQL:
選擇菜單。MenuId id,ParentId pid,MenuName文本,
(SELECT COUNT(1)FROM sys _ user _ menu其中UserId = #{userId} AND?MenuId = sm。MenuId)是Show,
(選擇串聯(
(案例當smenu。InsPower = 1 th EN 1 ELSE 0 END),',',
(案例當smenu。del power = 1 th EN 1 ELSE 0 END),',',
(案例當smenu。upd power = 1 th EN 1 ELSE 0 END),',',
(案例當smenu。view power = 1 th EN 1 ELSE 0 END))
從sys_user_menu smenu WHERE smenu。UserId = #{userId}
然後呢。斯麥努。MenuId = sm。MenuId) MenuInfo
從系統角色菜單sm內部連接sm上的系統菜單菜單。MenuId =菜單。MenuId
其中RoelId = #{roleId}
首先根據角色ID查詢權限,然後子查詢用戶是否有此權限,如果有,返回1木材使用,返回0;
最後直接把按鈕權限拼接成字符串,分別對應添加、刪除、修改、查看1,有沒有這個按鈕;
優化後,無論是添加還是修改用戶,加載用戶權限都可以控制在1~2秒;