Tìm hiểu về phân quyền trong ASP.NET


Từ: 21:15 11/09/2012
Bài: 23
Cảm ơn: 18
Thích: 2

Xin chào mọi người.

Tôi đang nghiên cứu về ASP.NET nhưng đang thắc mắc 1 điều là muốn phân quyền đến từng chức năng và từng file.

VD: có 1 file QLNhanvien.aspx trong đó có các chức năng thêm, sửa, xóa, tìm kiếm,... nhưng giờ muốn phân quyền cho từng user hoặc group user có thể sử dụng được chức năng này hoặc ko cho phép sử dụng. Trong csdl có 1 trường "permission" để phân biệt quyền

Tìm tòi nghiên cứu thấy có cách:

1. Giống hồi dùng VB thì kiểm tra trường "permission" sau đó enable hoặc visible  chức năng trên menu. Cái này có nhược điểm là ẩn đi nhưng trên web có đường link nên vẫn truy cập đc.

Thầy (cô) và các bạn biết cách nào dễ dàng và hiệu quả mong chỉ bảo. Cảm ơn nhiều.

Label
Từ: 12:10 27/09/2012
Bài: 155
Cảm ơn: 178
Thích: 28

Trong PHP thì dùng Session và user_id còn ASP.NET thì chịu :D

Label
Từ: 21:15 11/09/2012
Bài: 23
Cảm ơn: 18
Thích: 2

uhm thì đúng là dùng Session  hoặc cookie để xác định đăng nhập hay chưa với tài khoản nào rồi. Nhưng quan trọng xử lý 1 trang (có nhiều chức năng như nói ở trên) thì phải làm sao? Help me????

Label
Từ: 21:47 10/08/2012
Bài: 38
Cảm ơn: 45
Thích: 8

Thế thì hệ thống phải tổ chức lưu trữ thông tin: "Ai - được làm những gì - ở trang nào?" thôi

Label
Từ: 10:32 14/06/2012
Bài: 112
Cảm ơn: 124
Thích: 18

đại khái kiểu

 

lúc đăng nhập username , password xong thì kiểm tra quyền rồi gán : Session["role"] = 'role gì gì đó';

if(Session["role"].Equals("Admin")){

      ControlXYZ.Visible = true;

}else{

    ControlXYZ.Visible = false;

}

ko biết ý bạn như vậy đúng ko

Label
Từ: 21:15 11/09/2012
Bài: 23
Cảm ơn: 18
Thích: 2

cái của bạn chỉ có thể áp dụng cho nhóm quyền với số lượng ít nhóm thôi

đây tôi ko muốn phân cho từng nhóm mà là phân quyền cho từng tài khoản 1 nên ko thể dùng if hết các tài khoản đó đc.

gần đây tìm hiểu thấy có 1 cách có khả thi giống bên trên thầy giáo gợi ý là tạo thêm 2 bảng để phân quyền ai đc phép sử dụng chức năng j. nhưng bài ví dụ này nó sử dụng 1 chuỗi bit để gán ID (mỗi ID là 1 số mũ của 2) cho từng chức năng sau đó so sánh. Nên số lượng chức năng càng lớn thì id lưu trong csdl càng to.

src: http://hmweb.com.vn/aspnet-csharp/xay-dung-chuc-nang-dang-nhap-va-kiem-tra-quyen-phan-22.htm

đang có ý tưởng dùng 1 list rồi thay vì so sánh bit ta kiểm tra list đó. Nhưng chưa biết làm :D

Ai có ý tưởng hay biết cách làm thì giúp tôi với. Xin cảm ơn.

Label
Từ: 10:39 21/09/2012
Bài: 33
Cảm ơn: 30
Thích: 10

Theo e có thể làm như sau ạ!

Tổ chức các thông tin có dạng như diagram sau:

Trong tblPages có lưu thông tin về đường dẫn của trang cần kiểm soát (sLink).

Trong phần PageLoad() của mỗi trang kiểm tra quyền của người dùng với trang hiện tại đang mở bằng cách so sánh

+ Mã người dùng: Lấy từ Session đã gán sau khi đăng nhập. Giả sử  - Session["UID"]

+ Đường dẫn trang hiện tại đang load bằng cú pháp: 

string currentLink = HttpContext.Current.Request.Url.PathAndQuery;

(.PathAndQuery để lấy cả phần QueryString phía sau) 

Ví dụ: Có địa chỉ trang http://forum.fithou.net.vn/trangcon.aspx?tid=3106

--> string currentLink = /trangcon.aspx?tid=3106;

Vậy trong cơ sở dữ liệu sẽ lưu link dưới dạng /trangcon.aspx?tid=3106

Mặc định kiểu trả về của hàm CheckPermision là false. Nếu trong danh sách các trang (mã trang) được quyền truy cập của người dùng - lấy từ tblUsersPages tồn tại mã trang (có link trang hiện tại đang xét) thì trả về true

Trong phần PageLoad gọi hàm CheckPermision đã xây dựng như nêu trên. Nếu = false thì Redirect sang trang mặc định nào đó (chẳng hạn NoPermision.html)

Label
Từ: 12:56 02/07/2013
Bài: 3
Cảm ơn: 2
Thích: 0

có vẻ asp.net vẫn còn là ngôn ngữ lập trình web tốt hiện nay