c#
  • sql
  • menu
  • user-roles
  • 2017-04-10 63 views 0 likes 
    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

    要求是顯示菜單爲每個用戶。對於如 如果用戶1只訪問帳戶和財務的頁面,然後在菜單將顯示最多隻能賬戶和財政部門。

    ,如果user2的有權訪問頁面fourth1,然後進入菜單將顯示高達fourth1但它不應該顯示「第四」。

    我怎麼能接近它,任何文章引用等等.....

    在此先感謝......

    +0

    所以你在做什麼..但你會需要更多的遞歸踏踏實實子菜單.. – BugFinder

    回答

    0

    您可以使用此類型的數據庫設計的,它可以提供用戶權限級別渲染。

    Table 1 - Users

    Users 
        { 
         string Name, 
         int Id, 
         int RoleId 
        } 
    

    Table 2- Roles

    Roles 
        { 
         string Name, 
         int Id, 
         bool HasWriteAccess 
        } 
    

    Table 3 - MenuItems

    MenuItems 
        { 
         string Title, 
         int Id, 
         int RoleId 
        } 
    

    所以您的查詢就會

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

    這將給基於登錄的唯一用戶的菜單項。

    希望它有幫助!

    +0

    謝謝,,但它會涵蓋多級菜單..你可以在PIC看到.... – speedyraz

    +0

    這只是一個高層次的解決方案。在多級菜單的情況下,你可以有像菜單表更規範化的數據庫,MenuItemGroups,每個的MenuItems都會有與之相關聯,並根據您可以只獲取基於角色的子組和項目查詢的作用。 – shashwat12

    +0

    謝謝..我正在嘗試你的想法。讓我們看看它是如何工作的...並感謝您的建議... – speedyraz

    相關問題