Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 29 kết quả

Đề tài: Phân Quyền (Phần I : Phân quyền trên Menu)

  1. #1
    Ngày gia nhập
    02 2008
    Nơi ở
    Ho Chi Minh City
    Bài viết
    141

    Mặc định Phân Quyền (Phần I : Phân quyền trên Menu)

    Chào các bạn,

    Như tất cả chúng ta biết các ứng dụng thông thường đều có nhu cầu phân quyền cho các user (các nhóm người sử dụng) nghĩa là user sau khi đăng nhập vào ứng dụng thì user đó được phép sử dụng những màn hình nào (thường thì truy cập từ menu) và những chức năng nào trên màn hình đó (phân quyền trên Form : Vấn đề này tôi sẽ viết ở Phần II).

    Trong bài viết này tôi sẽ chia sẻ với các bạn 1 cách thức phân quyền trên menu. Ý tưởng của cách làm này như sau :
    - Đầu tiên chúng ta thiết kế 5 tables sau :

    + User : Table nào chứa các thông tin về người sử dụng.
    + Group : Chứa thông tin về nhóm người sử dụng.
    + UserGroup : Cho biết users thuộc về group(s) nào.
    + Menu : Chứa thông tin về menu chính (dữ liệu được lấy từ menu được design trên Form Main) của ứng dụng. Menu chính khi thiết kế sẽ cần có thêm 1 giá trị bắt buôc như sau: Nếu menuItem đó liên kết tới 1 Form nào đó thì cần set value (tên Form) cho thuộc tính Tag của MenuItem này.
    + MenuGroup : Cho biết 1 nhóm nào đó thì được phép sử dụng những menu nào của ứng dụng.

    Hình Database Diagram :


    - Sau khi đã có các tables trên thì chúng ta sẽ làm 3 Forms (frmUser, frmGroup, frmAuthorizarion) để danh cho việc thêm, sửa, xóa dữ liệu trên 4 tables : User, Group, UserGroup & MenuGroup.

    Form chính dùng cho việc phân quyền là frmAuthorization :
    Hình Form Authorization :


    - Trên Form này có 2 phần : 1 bên là list các group (TreeView) & 1 bên là Menu được BindData từ table Menu trong DB.
    - Khi user click vào 1 group nào đó thì các menuItem mà group đó được phép sử dụng sẽ được checked.
    - Khi [admin user] click nút sửa thì sẽ cho phép họ phân quyền trên menu bằng cách click trên từng menuItem.

    Khi click menuItem này sẽ có 2 tình huống xảy ra :
    + Nếu menuItem chưa được chọn thì nó sẽ được chọn (checked của menuItem là true và tất cả các subMenu(nếu có) sẽ được checked theo).
    + Nếu menuItem đã được chọn thì sẽ bỏ checked của menuItem này cũng như tất cả các subMenu (nếu có).

    Sau khi họ sửa xong (phân quyền) thì sự thay đổi đó sẽ được lưu xuống DB bằng cách Click Save Button.

    => Mỗi lần các user chạy chương trình thì sẽ lấy dữ liệu từ DB để Bind cho Menu chính của chương trinh (nếu user không có quyền đối với Menu nào thì menu đó sẽ bị Disabled hoặc không hiện ra).

    Các bạn có thể coi chi tiết hơn trong attached file : Bao gồm Database và project hoàn chỉnh. Muốn chạy project này trước tiên phải restore Database tên là Framework.bak nằm trong thư mục DB. Sau đó sửa lại ConnectionString trong file app.config tương ứng với máy của mọi người.


    Note :
    Khi chạy lần đầu tiên thì table Menu trong DB chưa có giá trị do đó cần phải Insert dữ liệu từ Menu đã được Design trên Form Main xuống DB bằng cách click button [Update Menu] trên Form Main này. Button này được hiển thị khi giá trị DEBUGMODE trong file app.config là true.

    ====================Bổ Sung========================
    Khi các bạn tạo thêm các Form tương ứng với các Menu Item mới thì các bạn viết thêm code để gọi Form này trong sự kiện MenuItem_Click (sự kiện này được gọi khi Bind Menu từ DB lên).

    Giả sử tôi có 1 Form mới tên là frmTest và 1 Menu mới là TEST
    Function MenuItem_Click - Cần viết thêm code trong function này:
    Visual C# Code:
    1. private void MenuItem_Click(object sender, System.EventArgs e)
    2.         {
    3.             if (((ToolStripMenuItem)sender).Tag == null) return;
    4.             string frmName = ((ToolStripMenuItem)sender).Tag.ToString();
    5.             Form frm = null;
    6.             switch (frmName.ToLower())
    7.             {
    8.                 #region "System"                    
    9.                 #endregion
    10.  
    11.                 #region "TEST"
    12.                 case "frmtest"://chữ thường hết
    13.                     frm = new frmTest();
    14.                     break;
    15.                 #endregion
    16.             }
    17.  
    18.             if (frm != null)
    19.             {
    20.                 frm.WindowState = FormWindowState.Maximized;                
    21.                 frm.MdiParent = this;                
    22.                 frm.Show();
    23.             }
    24.         }

    Còn đây là function ShowSubMenu - Bind Menu từ DB lên
    Visual C# Code:
    1. //Set MenuItem Click event
    2. subItem.Click += new System.EventHandler(MenuItem_Click);
    ================================================== =


    * Cái hình Form Authorization do trước đây không lấy được từ MediaFire do đó tôi up hình mới đã bao gồm cả phần phân quyền cho methods nên các bạn download về chạy sẽ không giống như hình trên mà chỉ có 1 TreeView ở bên trái và 1 toolStrip menu ở bên phải thôi. Hy vọng cuối tuần này sẽ post được tiếp Phần II.

    Phần II : http://forums.congdongcviet.com/showthread.php?t=28712
    Attached Thumbnails Attached Thumbnails PhanQuyen_Diagram.jpg   PhanQuyen_Form1.jpg  
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi huuhung : 16-10-2011 lúc 10:30 AM. Lý do: Đính kèm hình ảnh vào diễn đàn

  2. #2
    Ngày gia nhập
    12 2009
    Bài viết
    25

    Đang load về máy xem thử, cảm ơn bạn đã hướng dẫn !

  3. #3
    Ngày gia nhập
    12 2009
    Bài viết
    74

    thanks so much.
    Cảm ơn bạn nhiều.

  4. #4
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Có cái cách nữa về cái menu phân quyền này, lần trước có 1 bạn gửi cho tui, share luôn cho anh em tham khảo
    Attached Files Attached Files
    Cánh Chym ứ mỏi

  5. #5
    Ngày gia nhập
    04 2009
    Bài viết
    22

    tiếp phần II đi chứ hả pác Phucpham
    rất cám ơn

  6. #6
    Ngày gia nhập
    08 2008
    Bài viết
    46

    Mặc định Phân Quyền (Phần I : Phân quyền trên Menu)

    sao mình chạy ko đc nhỉ??

  7. #7
    Ngày gia nhập
    04 2009
    Bài viết
    22

    mình chạy được mà, làm theo hướng dẫn của chủ topic ấy

  8. #8
    Ngày gia nhập
    10 2009
    Bài viết
    2

    Thanks! Mong sớm được đọc phần II của bác.

  9. #9
    Ngày gia nhập
    03 2010
    Bài viết
    9

    thanks bác PhucPham nhiều!Đã đọc và đang nghiên cứu cái của bác!trong khi đó cũng đợi chờ phần II của bác lắm đấy!

  10. #10
    Ngày gia nhập
    05 2009
    Bài viết
    8

    Mặc định sao không update menu được vậy bạn

    bạn phúc phạm cho mình hỏi tại sao khi sửa file config lại mà vẫn ko hiện lến button Update Menu vậy ,minh tao ra nhiều menu nhưng lại không update được xuống DB :(

Các đề tài tương tự

  1. Phân Quyền (Phần II : Phân Quyền Trên Methods (Form))
    Gửi bởi phucpham trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 45
    Bài viết cuối: 08-10-2016, 10:29 PM
  2. Login hiển thị danh sách quyền lền làm menu
    Gửi bởi lengocktv trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 04-08-2011, 08:21 AM
  3. Cách phân quyền cho Menu làm bằng sitemap ?
    Gửi bởi tomcat trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 1
    Bài viết cuối: 22-06-2011, 09:29 PM
  4. Phân quyền user với control menu ?
    Gửi bởi tomcat trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 1
    Bài viết cuối: 20-06-2011, 09:51 PM
  5. Phân quyền Menu và form
    Gửi bởi dangtrang2246 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 23-08-2008, 12:31 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn