Phân quyền là một trong những bước rất quan trọng sau đăng nhập.
Trong đó:
tbl_user: bảng lưu người dùng bao gồm các thuộc tính như ID, Name, Username, Password. Bảng không có khóa ngoại.
tbl_permision: bảng chứa nhóm quyền hạn. bao gồm các thuộc tính, ID nhóm quyền hạn, tên nhóm quyền hạn, và mô tả nhóm quyền hạn.
tbl_per_relationship: là bảng lưu mối liên hệ giữa người dùng và nhóm quyền hạn. Mục đích của bảng này không phải là để một người dùng có nhiều nhóm quyền mà để không phải truy vấn lại bảng user chứa thông tin nhạy cảm như username và password. Bạn cũng có thể bỏ qua bảng này và liên hệ trực tiếp giữa bảng user và permision luôn, nhưng mình khuyên bạn nên sử dụng thêm bảng này thì tốt hơn.
tbl_permision_detail: là bảng sẽ chứa những quyền hạn cụ thể dành cho nhóm quyền hạn. thật ra trường này bạn có thể bỏ dòng name_action thì nó không cần thiết lắm. Dòng code_action là để khi lập trình mình định nghĩa một thao tác nhất định trong bằng code này ví dụ quyền sửa thì code nó là EDIT chẳng hạn.
id_user_rel là khoá ngoại của bảng tbl_per_relationship ứng với khoá chính id_user của bảng tbl_user
id_per_rel là khoá ngoại của bảng tbl_per_relationship ứng với khoá chính id_per của bảng tbl_permision
id_per là khoá ngoại của bảng tbl_permision_detail ứng với khoá chính id_per của bảng tbl_permision_detail
Sau bước đăng nhập sẽ trả về id của người dùng. Sau đó là truy vấn các quyền hạn người dùng trong cơ sở dữ liệu
Bảng tbl_user cung cấp các tài khoản khả dụng có thể truy cập được vào hệ thống. Trong project này đã cấp sẵn quyền quản trị và quyền vận hành. Trong đó quyền quản trị thì có quyền hành cao nhất được thay đổi thay. Và quyền vận hành chỉ được chạy dừng hệ thống không có quyền thay van.
Sau khi lấy được id người dùng thì truy vấn đến bảng tbl_permision để lấy được id nhóm quyền hạn id_per_rel
Sử dụng thêm một lệnh if để kiểm tra trường suspended để xem quyền hạn này của người dùng này có bị đình chỉ không, nếu không thì mới lấy ID quyền hạn ra.
Hình 4. 4 Bảng tbl_permision
Sau khi có ID nhóm quyền, sau sẽ lấy chi tiết những quyền tại bảng tbl_permision_detail.
Hình 4. 5 Bảng tbl_permision_detail
Trong C# cần tạo ra một biến list dùng chung list_detail để lưu những code_acction mà csdl trả về. list_per(id_per(frm_login.ID_USER));
List<string> list_detail;
private void frm_main_Load(object sender, EventArgs e) {
list_detail = list_per(id_per(frm_login.ID_USER)); }
Hàm list_detail sẽ giữ các code_action giúp kiểm tra khi cần nhanh chóng hơn.
Sau khi có danh sách quyền hạn, Hàm checkper sẽ cho phép truyền vào code_action, và duyệt trong mãng để kiểm tra, sau đó trả về giá trị boolean (true,false). Hàm viết như sau: private Boolean checkper(string code)
{
Boolean check = false;
{ if(item==code) { check = true; } } return check; }
Trước đoạn thay van câu lệnh kiểm tra quyền thay van if (checkper("ThayVan") == true)
Kết quả khi đăng nhập hệ thống với quyền op1
Hình 4. 6 Khi đăng nhập với op1 thì người dùng không có quyền thay van
Hình 4. 7 Thay van khi đăng nhập với tài khoản admin