중화사전망 - 구한말 사전 - Java에서 권한 관리를 수행하는 방법
Java에서 권한 관리를 수행하는 방법
먼저 아이디어를 소개합니다:
1. 사용자 테이블 사용자
2. 역할 테이블 역할;
4. 역할 메뉴 권한 테이블 role_menu;
5. 사용자 메뉴 권한 테이블 user_menu; 사용자 역할에 따라 역할의 모든 권한을 꺼내고 사용자에게 권한을 할당합니다. 메뉴 버튼(추가, 삭제, 수정)의 권한은 중간 테이블(user_menu)에 배치됩니다.
1. 새 사용자를 추가할 때 사용자 역할에 따라 권한을 할당하려면 일괄, 일괄, 일괄로 추가하고 중요한 사항을 세 번 말하고 역할 권한을 쿼리하지 않은 다음 루프에 대해 설명합니다. 너무 비효율적입니다.
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이 권한을 다시 할당할 필요가 없습니다. 역할이 수정되면 원래 권한을 삭제하고 다시 할당합니다.
3. 마지막으로 최적화할 작업은 처음에 사용자를 기준으로 쿼리하는 것입니다. 역할 권한, 사용자 권한, 프런트 엔드로 돌아가기, 프런트 엔드 처리 결과가 매우 정체되어 기본적으로 3~4초가 소요됩니다.
해결책은 한 단계로 모든 쿼리를 반환합니다. 데이터.
다음 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), ',',< / p>
(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 메뉴 on sm.MenuId = menu.MenuId
WHERE RoelId = #{roleId}
먼저 역할 ID를 기준으로 권한을 쿼리한 다음 사용자에게 권한이 있는지 하위 쿼리합니다. 그렇다면 1이 반환되고, 그렇지 않으면 0이 반환됩니다.
마지막으로 제가 직접 추가 및 삭제에 각각 해당하는 버튼 권한을 문자열로 연결하고, 이 버튼 없이 이 버튼 0으로 1을 봅니다.
최적화 후 사용자 추가 또는 수정 여부에 따라 사용자 권한 로드가 가능합니다. 1~2초 안에 제어됩니다.