권한 시스템 설계 (메뉴)

B / S 시스템 메뉴 와 사용자 캐릭터 연결.
먼저 데이터베이스 테이블 구조:
사용자 테이블 TUSER(USERID NUMBER,NAME VARCHAR2(63),PWD VARCHAR2(127))
캐릭터 리스트 TROLE(ROLEID NUMBER,NAME VARCHAR2(63))
사용자 역할 관계 표 TUSER_ROLE(USERID NUMBER,ROLEID NUMBER)
메뉴 표 TMENU(MENUID NUMBER,MENUNAME VARCHAR2(30),URL VARCHAR2(128),MODULE VARCHAR2(50),PERMISSION INT)
캐릭터 메뉴 관계 표 TROLE_MENU(MENUID NUMBER,ROLEID NUMBER)
struts 2 액 션 설정

<action name="*/*" method="{2}" class="{1}Action">
<result name="input">/view/{1}/{1}_%{preAction}.jsp</result>
<result name="insert">/view/{1}/{1}_{2}.jsp</result>
...
</action>

사실 이들 의 관 계 는 쉽게 말 하면 사용자 와 캐릭터 가 많 고 캐릭터 와 메뉴 가 많다 는 것 이다.
먼저 시스템 URL 조직 방식 / sys / module / crud. jspx, 즉 하나의 기능 모듈, 예 를 들 어 사용자 관리 / sys / user / list. jspx, / sys / user / insert. jspx...
URL 의 module 대응 TMENU 표 의 module 필드, Permission 필드 에 대응 하 는 list, insert 등에 대응 하 는 표시 코드 입 니 다.내 표시 규칙 은 list - 1, insert - 2, edit - 4, save - 8, delete - 16 으로 유추 된다.
SELECT MODULE,SUM(PERMISSION) AS PM FROM T_MENU INNER JOIN.................................................................................
다음은 위 에 있 는 것들 을 어떻게 결합 시 킬 것 인가?
1. 먼저 ContextLoadListner 를 써 서 표시 규칙 을 초기 화 합 니 다. 저 는 Xml 를 사용 합 니 다.

<Permissions>
<Permission canIgnore="false">
   <Name>list</Name><Value>1</Value>
</Permission>
<Permission canIgnore="true">
   <Name>select</Name><Value>256</Value>
</Permission>
<Permissions>

canIgnore 는 이 동작 이 권한 판단 을 무시 할 수 있 는 지 여 부 를 표시 합 니 다. 예 를 들 어 어떤 페이지 는 부 서 를 선택 하기 위해 창 을 꺼 내야 합 니 다 (/ sys / depart / select. jspx). 이 때 select 는 권한 판단 을 거치 지 않 습 니 다.
초기 화 완료 후 맵 < String, Permission > 을 applicationContext 에 넣 습 니 다.
2. 차단기 (저 는 Struts 2) 를 씁 니 다.
   먼저 URL 에 있 는 Action 을 가 져 옵 니 다. 이 Action 을 사용 하여 Context 의 맵 < String, Permission > 에서 Permission 대상 을 찾 습 니 다.

permission = definition.get(action);
if(permission.canIgnore())
  return true;
else{
   Integer modulePermission = session  .get(module);
   return permission.getValue() & modulePermission > 0;
}

좋은 웹페이지 즐겨찾기