2010-07-12 4 views
0

다중 레벨 탭/드롭 다운 메뉴 탐색 설정에서 권한을 구현하는 중입니다. if 문에서 각 메뉴 항목을 래핑하는 것과 비교하여 권한을 구현하는 더 좋은 방법이 있습니까?메뉴에 대한 여러 액세스 조건 주소 지정?

사용자 권한이 테이블에 저장되어 배열로 가져 오면 10 개의 메뉴 항목이 있으며 각 메뉴 항목에는 수많은 하위 메뉴 항목이 있습니다. 예를 들어 데이터베이스에서 특정 메뉴 항목에 대한 액세스를 나타내는 부울 플래그 인 20 개의 다른 열이 있습니다.

Home 
Admin -----> Users 
      Notices 
      Setup 
Projects --> Active Projects 
      Inactive Projects 
      Updates 
Reports 
Preferences 
Research --> Open Tickets 
      Closed Tickets 
      Unassigned 

이상적으로, 나는 개인 계정이 해당 섹션에 액세스 할 수있는지를 결정 각 메뉴 항목에 대한 플래그를 갖고 싶어. 이 문제를 해결할 수있는 유일한 방법은 if ​​조건에서 각 메뉴 항목을 배치하는 것입니다.하지만이 방법은 박쥐 소리가 들리지 않는 경우 신속하게 다루기가 쉽지 않은 것처럼 들립니다.

캐시 된 버전에서 변경된 사용자 권한이없는 경우 생성 된 메뉴가 캐시 될 때마다 캐시 된 버전이므로 캐시 성능이 걱정됩니다. 그런 다음 새 메뉴가 생성됩니다.

+0

시스템에 새 사용자를 추가 할 때마다 각 개별 메뉴 항목에 대한 액세스 권한을 설정해야합니까? 그렇지 않은 경우 역할 기반 보안 시스템을 고려하는 것이 좋습니다. –

답변

0

나는 메뉴 항목 당 이 아닌 것 같은 테이블 뭔가 메뉴 항목 당 :

insert into menu_access (username, menuid, access_flag) values ('TONY', 123, 1); 
insert into menu_access (username, menuid, access_flag) values ('TONY', 456, 1); 
insert into menu_access (username, menuid, access_flag) values ('TONY', 789, 0); 
:

create table menu_access 
    (userid varchar2(30), 
    menuid integer, 
    access_flag integer, 
    primary key (username, menuid) 
    ); 

이 그럼 당신은 같은 데이터를 삽입 할 것

(대안으로 access_flag 열을 모두 생략하고 사용자가 액세스 할 수있는 메뉴 항목의 행을 저장하는 것입니다).

이렇게하면 각 메뉴 항목을 표시하기위한 조건은 같고 다른 값을 menuid에 바인딩합니다. 을 생성 할 수 있습니다. 사용자가 액세스 할 수있는 모든 행을 선택하고 그에 따라 메뉴를 구성합니다.