중화사전망 - 서예자전 - Java 에서 권한 관리 방법

Java 에서 권한 관리 방법

먼저 다음과 같은 아이디어를 소개하겠습니다.

1, 사용자 테이블 사용자;

역할 테이블;

3. 메뉴

4. 역할 메뉴 권한 테이블 role _ menu

5. 사용자 메뉴 권한 테이블 user _ menu

그림과 같이:

사용자 역할에 따라 권한을 할당하고 사용자에게 권한을 할당합니다. 메뉴의 버튼 (추가, 삭제, 수정) 에 대한 권한은 중간 테이블 (user _ menu) 에 있습니다.

1. 사용자를 추가할 때 사용자의 역할에 따라 권한을 할당해야 합니다. 반드시 배치로 추가해야 합니다. 배치, 배치, 배치, 중요한 일을 세 번 말하고, 역할 권한을 조회하지 말고, for 을 반복하면 효율성이 너무 떨어진다.

SQL 은 다음과 같습니다.

Sys_user_menu(UserId, MenuId, DelPower,? Upd 파워,? InsPower,? ViewPower) 를 참조하십시오

Sys_role_menu 에서 #{userId} UserId, MenuId, 1 DelPower, 1 UpdPower 를 선택합니다

UpdPower 는 기본적으로 사용 가능하므로 모두 1 이므로 역할 질의에 따라 권한을 직접 추가할 수 있어 응답 시간이 크게 향상됩니다.

2. 사용자 역할을 수정할 때 사용자 권한을 재할당하는 것을 잊지 마십시오! 이것은 잊을 수 없다, 위의 방법을 사용할 수있다;

비즈니스 방법:

역할이 수정되지 않은 경우 권한을 재할당할 필요가 없으며 모든 userRole 이 null 로 재설정됩니다. 역할이 수정되면 원래 권한이 삭제되고 재할당됩니다.

마지막으로 최적화 시간은 사용자를 기준으로 권한을 쿼리하는 것입니다. 이것은 내가 처음에 한 일이고, 역할 권한과 사용자 권한을 조회하고, 프런트 엔드 처리로 돌아가는 것이다. 결과는 매우 카드, 기본적으로 3 ~ 4 초가 걸립니다.

해결, 한 번에 제자리에; 질의는 모든 데이터를 반환합니다.

다음 SQL:

메뉴를 선택합니다. MenuId id, ParentId PID, MenuName 텍스트,

(count 선택 (1) from sys _ user _ menu 여기서 UserId = #{userId} AND? MenuId = sm 입니다. MenuId) 는 쇼입니다.

(연결 선택 (

(시나리오는 smenu 입니다. Inspower =1then1else0end),',',

(시나리오는 smenu 입니다. Delpower =1then1else0 end),',',

(시나리오는 smenu 입니다. Upd power =1th en1else 0 end),',',

(시나리오는 smenu 입니다. Viewpower =1then1else0 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 초 동안 제어할 수 있습니다.