1. 程式人生 > >Java 實現系統許可權控制思路

Java 實現系統許可權控制思路

首先介紹下思路:

1、使用者表 user;

2、角色表 role;

3、選單 menu;

4、角色選單許可權表 role_menu;

5、使用者選單許可權表 user_menu;

如圖:

根據使用者角色取出該角色所有許可權,並對使用者進行許可權分配;注意選單的按鈕(新增、刪除、修改)許可權是放在中間表(user_menu)中的;

1、新增使用者時,是要根據使用者角色進行分配許可權的 一定記得批量新增;批量、批量、批量,重要的事情說三遍,不要查詢角色許可權,然後for迴圈,這樣效率太低了;

SQL如下:

INSERT INTO sys_user_menu(UserId, MenuId, DelPower,    UpdPower,    InsPower,    ViewPower)
SELECT #{userId} UserId, MenuId, 1 DelPower, 1 UpdPower, 1 InsPower, 1 ViewPower FROM sys_role_menu WHERE RoelId = #{roleId}

updPower 預設都是有的 所以都是1,這樣根據角色查詢出許可權直接新增,響應時間大大提升;

2、修改使用者角色也要記得重新分配使用者許可權哦!這個不能忘,可以用上面的方法;

業務方法:


如果角色沒有修改,是不用重新分配許可權的,所有userRole 重置為 null,如果角色修改則刪除原許可權,重新進行分配;

3、最後要優化的就是根據使用者查詢許可權的時候啦,我最開始是這樣做的,查詢角色許可權,使用者許可權,返回到前端,前端進行處理;結果就是很卡 基本上要三到四秒,

解決方案,一步到位;一個查詢返回全部資料。

如下SQL:

SELECT menu.MenuId id, ParentId pid, MenuName text,
            (SELECT COUNT(1) FROM sys_user_menu WHERE UserId = #{userId} AND  MenuId = sm.MenuId) isShow,
            (SELECT CONCAT(
                (CASE WHEN smenu.InsPower = 1 THEN 1 ELSE 0 END), ',',
                (CASE WHEN smenu.DelPower = 1 THEN 1 ELSE 0 END), ',',
                (CASE WHEN smenu.UpdPower = 1 THEN 1 ELSE 0 END), ',',
                (CASE WHEN smenu.ViewPower = 1 THEN 1 ELSE 0 END))
                FROM sys_user_menu smenu WHERE smenu.UserId = #{userId}
                AND  smenu.MenuId = sm.MenuId) MenuInfo
            FROM sys_role_menu sm INNER JOIN sys_menu menu on sm.MenuId = menu.MenuId
            WHERE RoelId = #{roleId}

首先根據 角色ID查詢出許可權,然後子查詢使用者是否有該許可權,有返回1 木用返回 0;

最後按鈕許可權 我是直接拼接成字串,分別對應 新增、刪除、修改、檢視 1 有該按鈕 0 沒有該按鈕;

優化後 不管是新增、修改使用者,載入使用者許可權都能控制在 1~2 秒;

相關推薦

Java 實現系統許可權控制思路

首先介紹下思路: 1、使用者表 user; 2、角色表 role; 3、選單 menu; 4、角色選單許可權表 role_menu; 5、使用者選單許可權表 user_menu; 如圖: 根據使用者角色取出該角色所有許可權,並對使用者進行許可權分配;注意選單的按鈕(新

java系統許可權設計思路總結

來源:https://my.oschina.net/cloudcross/blog/1920706 這篇文章的定位,不是宣傳某個框架,僅僅之是梳理一下有關許可權方面的一些想法和最近專案中的一些探索過程。 我們主要想解決一下問題。 1.什麼是許可權,程式設計師理解的

基於Vue實現後臺系統許可權控制

基於Vue.js 2.x系列 + Element UI 的後臺系統許可權控制 前言:關於vue許可權路由的那些事兒…… 專案背景:現有一個後臺管理系統,共存在兩種型別的人員 ①超級管理員(稱作admin),②普通使用者(稱作editor) 每種型

Java實現系統目錄實時監聽更新。

warning xtend absolute ava single sdn data- sdk spl SDK1.7新增的nio WatchService能完美解決這個問題。美中不足是如果部署在window系統下會出現莫名其妙的文件夾占用異常導致子目錄監聽失效

談一次java web系統的重構思路

asc rip des 框架 stringify 代碼混淆 dwr框架 ase pan ——略談Java web軟件如何提供二次開發接口 接手公司的一個Java web軟件產品,該軟件采用傳統的dwr框架。dwr框架相當於一個中間層,使得ja

潤乾報表如何實現資料許可權控制

售前現場交流或售後技術支援階段,經常被客戶問到:“你們報表系統是怎麼搞許可權控制的?” 既然經常被問,那麼今天就討論一下這個問題。 首先呢,看看許可權管理長啥樣! 許可權管理:(來自百度百科),一般指根據系統設定的安全規則或者安全策略,使用者可以訪問而且只能訪問自己被授權的資源,不多不少

zookeeper java呼叫及許可權控制

import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; imp

java實現動態許可權(選單管理)動態新增選單,動態新增角色SSM框架

首先是資料庫設計 Menu表(選單表) Role表(角色表) Role_Menu表(角色選單關係表) User表(使用者表) User_Role表(使用者角色關係表) 其他實體類就略過了 在Menu實體類中添加了一個List<Menu&

vue後臺管理系統許可權控制思考與實踐

前言 最近在開發管理系統時遇到了任何管理系統都會有的需求---許可權控制,之前也遇到過這種需求,但是架構不完善導致的各種問題使得後期維護非常麻煩,這一次的方案解決了之前的種種問題,現做一次記錄,當然這個架構後期可能會有坑,不過得一步一步的嘗試才能發現並解決問題。 許可權控制需求 因為是單頁面應用,路由交

Vue 前端應用實現RBAC許可權控制的一種方式

許可權控制不管前後端都可以簡單分為: 身份認證許可權控制 RBAC許可權控制 ... 而前端我和團隊,檢索了很多地方都沒有很成熟或者說可行的關於 RBAC基於角色的訪問控制相關的前端許可權控制方案,可能是我們檢索的方法不對,亦或是大家都忙於其他,沒有時間把自己的方法整理公佈出來,故我們在

用struts的攔截器實現使用者許可權控制

 步驟1、匯入struts2的庫。   步驟2、編寫Interceptor類。 package com.voicesoft.Interceptor; import com.opensymphony.xwork2.Action; import com.opensymphon

springboot+shiro+mybatis實現角色許可權控制

背景 spring+spirngmvc+shiro的整合已經有很多了,之前的專案中也用過,但是最近想在springboot中使用shiro這樣,其他專案需要的時候只需要把它依賴進來就可以直接使用,至於shiro的原理其他的blog都有很多介紹。這裡只講幾個重點

yii2搭建完美后臺並實現rbac許可權控制案例--之左側選單子級無法高亮的問題

新增角色是屬於角色這個選單的,如何在執行新增角色這個操作時讓角色這個選單處於選中狀態呢?adminlte左側導航的Create,View等action不能定位到index的模組(左側二級導航不能展開定位)如果你是按照我們上文的教程來的,那接下來所要說明的問題應該不是問題,先

如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權

隨著前後端分離架構的流行,許可權控制這個曾經陌生的話題開始進入很多前端同學的視野,作為一名前端,可能部分同學會認為許可權是後端的事,其實這個想法是片面的,後端是許可權控制的最後一扇門,而在這之前,做好前端許可權控制至少有以下幾個原因:通過控制路由和請求,將越權請求攔截在前端,

java實現插入排序(思路實現

插入排序(英語:Insertion Sort)是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。插入排序

java實現系統限流及IP限流

高併發系統下, 有三把利器 快取 降級 限流. 快取: 將常用資料快取起來, 減少資料庫或者磁碟IO 降級: 保護核心系統, 降低非核心業務請求響應 限流: 在某一個時間視窗內對請求進行限速, 保護系統  本文主要介紹限流, 常見限流演算法中又分為計數器演算法, 漏桶演算法, 令牌桶演算法. 計數器演算法

yii2搭建完美后臺並實現rbac許可權控制例項教程

1、安裝yii2 已安裝的請繼續看下一步操作 2、配置資料庫 2.1 配置資料庫 修改common/config/main-local.php 實際專案中本地的資料庫往往跟線上資料庫不一致, 我們這裡配置到main-local.php就可以了,產品上線後,我們

Yii2搭建後臺並實現rbac許可權控制完整例項教程

1、安裝yii2 未安裝的請參考yii2史上最簡單式安裝教程,沒有之一 已安裝的請繼續看下一步操作 2、配置資料庫 2.1 配置資料庫 修改common/config/main-local.php 實際專案中本地的資料庫往往跟線上資料庫不一致, 我們這裡配置到main-local.php就可以了,產品上線後

系統許可權控制體系

文 / 阿里P7工程師   嚴明明目錄訪問控制的本質:訪問控制需要完成的兩個任務:訪問控制理論模型:Java常用訪問控制框架:許可權系統的演變歷史:1: 標準的JAAS 時代;2: 單點登入(SSO)+

java 實現IP訪問量控制

同一個IP 訪問網站, 不能同時超過配置的最大值, 可以用來保護REST IP 或者DOS攻擊 Java程式碼   /*   * Pprun's Public Domain.   */   package org.pprun.common.security;