Share Code Web - Chia sẻ niềm đam mê bất tận > Lập trình > ASP/ASP.Net > Phân quyền truy cập cho Menu trong asp.net
Phân quyền truy cập cho Menu trong asp.net
Nguyễn Trung Hiếu
Share Code Web Company 2012

Phân quyền truy cập cho Menu trong asp.net

Bài viết hướng dẫn phân quyền cho từng menu trong asp.net

I. Introduction

Trong bài viết trước tôi đã giới thiệu với các bạn kỹ thuật tạo ra dynamic menu lấy trong database. Bài viết này, tôi sẽ tiếp tục hướng dẫn bạn làm thế nào để phân quyền truy cập cho từng menu một và quyền này được cài đặt bởi admin trong hệ thống.

Trước tiên việc cần làm là design menu đa cấp và nhớ 2 giá trị sau:

  1. ValuePath của MenuItem
  2. Thuộc tính MaximumDynamicDisplayLevels của control Menu

II. ValuePath

ValuePath là thuộc tính lưu trữ giá trị đường dẫn tương đối của menu đó với menu gốc. Các bạn xem hình sẽ rõ:
ValuePath
Vậy, nếu ta quy định giá trị Value của MenuItems có dạng như sau:

Thì giá trị ValuePath của MenuItems sẽ có dạng như sau:

OK!. Giờ chúng ta sẽ xây dựng một hàm tên là getValuePath để tính toán và trả về valuePath của MenuItem, được thừa kế từ MenuIdMenuItemCollection từ database.

III. Menu Level

Bạn có thể thay đổi mức hiển thị tối đa cho menu (Maximum display levels) (ví dụ như MenuDepth) trong menu bằng cách add thêm một dòng code nữa vào sự kiện Page_Load của trang MasterPage khi !IsPostBack như thế này:

Khi chúng ta set = 1

menu level 1
Khi chúng ta set = 2

menu level 2
Như bạn có thể nhìn thấy đấy, sau khi chúng ta làm xong thì kết quả sẽ được như vậy đó, còn lưu ý nữa là cái Maximum display Levels là mức cao nhất để hiển thị, cho nên trong database các bạn cũng phải thiết lập menu có mức đó, thì nó mới hiển thị, chứ không là không xong đâu! hì hì.

IV. Create a Menu with multiple Level

Để tạo được menu kiểu dạng này, thì bạn phải sửa lại hàm getMenu() ở bài trước như sau:

Đoạn code trong dòng comment có nghĩa như sau:
– dòng đầu lấy ra giá trị ValuePath của MenuItem
– dòng thứ hai là dựa vào giá trị ValuePath vừa lấy được, tìm ra MenuItem tương ứng từ MenuItemsCollection và thêm một menu con là mnu vào menu đã tìm thấy.

IV. Menu Permission

Trước tiên tôi cần nói qua cho bạn biết cách mà tôi lưu trữ quyền người dùng được phép truy cập vào các menu có định dạng như sau:

Ở đây menuId là các giá trị được phân cách nhau bằng dấu ‘-‘
Áp dụng quyền này để thực hiện phân quyền, chúng ta làm như sau:
B1: Thực hiện lấy quyền trong database và trả về một mảng string bằng hàm getUserPermissions(string username) và thực hiện cắt các ký tự ‘-‘ ra khỏi chuỗi đó.

B2: Khi đã có trong tay quyền này, thì chúng ta sẽ cho phép hiển thị những menu nào được phép.

Vậy là xong rồi đó! Bạn coi lại hình phía dưới nha
allow access menu

V. Url Validation

Tiếp theo chúng ta sẽ xử lý trường hợp người dùng cố tình click vào những menu không được phép này bằng hàm validateUrl(string url) như sau:

Trong đó giá trị đầu vào chúng ta sẽ lấy request mà user gửi tới như sau:

Nếu được quyền truy cập thì sẽ cho truy cập tiếp, còn không thỉ redirect tới 1 trang báo lỗi như sau
denied access
Nếu bạn nào không làm được thì download mã nguồn đi kèm bên dưới nhé!

Download Code

 (CodeProject)

Prabhat Kr. Singh 

Loạt bài viết về Dynamic Menu with CSS

Loạt bài viết về Hướng dẫn phân trang

Related Posts

Tác giả: Nguyễn Trung Hiếu

Một blogger ... cùi bắp! Đơn giản: tôi muốn ghi lại những gì xảy ra xung quanh, cả công việc lẫn cuộc sống và chia sẻ với các bạn đọc. Nếu bạn cảm thấy bài viết có nhiều điểm không chính xác, hãy comment và chia sẻ để tôi còn được học hỏi từ những góp ý của bạn. Email: hieunt.dcn@gmail.com

Leave a comment

Bạn phải Đăng nhập để tham gia bình luận.

https://sharecodeweb.net/?s={search_term_string}

Blog Stats

  • 5.687 hits
%d bloggers like this: