2017-04-10 3 views
0

데이터베이스의 테이블에서 동적으로 생성되는 메뉴가있는 양식이 있습니다. 도에 나타내는 바와 같이사용자 당 메뉴 표시

public void FourthMenu(ToolStripMenuItem mnu, string submenu) 
    { 

     string Seqchild = "SELECT FRM_NAME,FourthMenuID FROM MNU_FOURTH WHERE ThirdMenuID = '" + submenu + "'"; 
     SqlDataAdapter dachildmnu = new SqlDataAdapter(Seqchild, conn); 
     DataTable dtchild = new DataTable(); 
     dachildmnu.Fill(dtchild); 

     foreach (DataRow dr in dtchild.Rows) 
     { 
      ToolStripMenuItem SSMenu2 = new ToolStripMenuItem(dr["FRM_NAME"].ToString(), null, new EventHandler(ChildClick)); 
      FifthMenu(SSMenu2, dr["FourthMenuID"].ToString()); 
      mnu.DropDownItems.Add(SSMenu2); 
     } 

outputa을 .. 다음

enter image description here

사용자 요구에 따라 메뉴를 표시하는 것이다. 예 : user1이 Accounts and Finance 페이지를 방문 할 수있는 권한 만 가지고 있으면 메뉴가 계정 및 재무 정보에만 표시됩니다.

사용자 2가 페이지 4를 방문 할 권한이있는 경우 메뉴는 4 번째까지 표시되지만 "4 번째"는 표시되지 않아야합니다.

난 사용자 권한을 제공 할 수있는 문서 참조 등 ..... 당신은 데이터베이스 설계의이 유형을 사용할 수 있습니다

+0

당신이하고있는 일을 ..하지만 서브 메뉴를 되 찾는 데 더 재귀 적이 될 필요가 있습니다 .. – BugFinder

답변

0

사전에

감사합니다 ... 그것을 접근 할 수있는 방법 레벨 렌더링.

MenuItems 
    { 
     string Title, 
     int Id, 
     int RoleId 
    } 

Table 1 - Users

Users 
    { 
     string Name, 
     int Id, 
     int RoleId 
    } 

Table 2- Roles

Roles 
    { 
     string Name, 
     int Id, 
     bool HasWriteAccess 
    } 

Table 3 - MenuItems

그래서 쿼리가 될 것입니다

select * from MenuItems mi, Roles role, Users user 
     where mi.RoleId = role.Id and 
     user.RoleId = role.Id and 
     user.Id= LoggedInUserId; 

로그인 한 사용자 만 메뉴 항목을 제공합니다.

희망이 있습니다. !!!

+0

감사합니다. 그러나 그것은 다중 레벨 메뉴를 다룰 것입니다. 그림에서 볼 수 있듯이 .... – speedyraz

+0

이것은 단지 고급 솔루션이었습니다. 다중 레벨 메뉴의 경우 Menus, MenuItemGroups, MenuItems와 같은 테이블에 각각 정규화 된 데이터베이스를 가질 수 있으며 쿼리에 따라 역할 기반 하위 그룹 및 항목 만 가져올 수 있습니다. – shashwat12

+0

감사합니다. 나는 당신의 생각을 시도하고 있습니다. 그것이 어떻게 작동하는지 볼 수 있습니다 .. 그리고 당신의 제안에 감사드립니다 ... – speedyraz