C/S模式根據許可權基於反射機制實現動態產生菜單

來源:互聯網
上載者:User

    有了一些MIS的開發經驗,也用笨方法實現了根據不同使用者、不同角色、不同許可權分配不同菜單的功能,但總覺得那還不是自己想要的。因為那時有進度約束著的,為了趕工而投機取巧了罷了。
    實現方法是這樣的:
    1、資料庫中設計了使用者表、使用者角色表、角色許可權表、角色基本表和菜單結構表,不同的使用者可分配不同的角色,不同的角色指派不同的許可權。
     2、在主程式中加好菜單並建立了兩個數組,一個字元型的(儲存菜單名),一個布爾型的(儲存菜單狀態),二者等長。第一個數組的元素跟菜單結構表中的菜單名一一對應,第二個數組的元素全是false。
        在主程式的Load事件裡面加入代碼:
        int i = 0;  
         menuItem1.Visible = menuStates[i];//menuStates就是第二個數組
         menuItem1.Enabled = menuStates[i++];//如果只設定功能表項目不可見,菜單的快速鍵還是能響應的
        ……
        注意:此處menuItem一定要和實際的菜單一一對應。
     3、在使用權限設定模組實現給使用者指派角色,給角色指派許可權既菜單。在給角色指派許可權時其實是把菜單結構表中菜單名分配給角色,加到角色許可權表中。角色的許可權是一串字元,就是菜單結構表中的菜單名累加起來(中間加上特定的分隔字元,相同要進行約減)。

     4、使用者登入的時候就直接在主程式中取使用者的角色,再根據角色取許可權,再把許可權串加到一起,就得到這個使用者的所有許可權。然後將許可權串按照分割符分開成數組,再將分割後的數組與2中第一個數組中元素一一進行比較,如果相同就將對應位置的菜單狀態數組元素設為true。這要在2中代碼之前處理。

    這樣,菜單的動態顯示就能實現了

    最近又看了一些關於動態菜單的文章,其中大多是講用XML實現的,也有提到反射的,恍然發現我之前的方法確是微不足道的,所以還想做些這方面的研究。經過一個晚上的努力,終於實現了一個“XML+反射”的動態菜單,把菜單的功能單獨做到一個dll,然後動態添加到主程式,增加新的功能只需要重建一個dll,然後再XML檔案中配置,不需要重新安裝主程式。但是許可權還是沒有去做,因為我開始感到迷茫,這樣做是否合理、是否高效?動態產生菜單有沒有更好的解決方案呢? 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.