Hi All, Mình đang làm đồ án về quản lý ứng dụng viết bằng Access (Lập trình VBA) cũng gần hoàn thành nhưng đang gặp rắc rối về vấn đề quản lý và phân quyền người dùng trong ứng dụng (ví dụ Admin cho từng user khi Login vào sẽ được quyền truy cập một số Form do Admin quy định). Vậy có ai biết cánh viết code phân quyền cho user chỉ cho mình với nhé. Mình xin chân thành cảm ơn các bạn.
Để viết được theo ý bạn thì phải đảm bảo được các yêu cầu sau đây:
Chú ý:
- Là phân quyền ứng dụng chứ mấy cái security winzard của bác MS chẳng có ý nghĩa gì trong trường hợp này.
- Những vấn đề ncxn đề cập dưới đây là định hướng chung (vì mình cũng chưa viết trên access lần nào nên không biết có sử dụng được hay không?! )
-----------
1. Phân quyền ứng dụng chẳng qua là cấp quyền truy cập đến các control trên toàn file (mà bạn gọi là phần mềm)
1.1. Menu: bất cứ bạn làm menu dạng gì thì củng phải điều khiển được bằng VBA (trên nét có rất nhiều, ví dụ: thử google "menubar with VBA Code"). Điều này có nghĩa rằng khi thuộc tính do bạn định nghĩa trả về "false" thì menu tương úng sẽ không xuất hiện trên menubar (khi user không được cấp quyền truy cập đến chức năng tương ứng)
1.2 Các đối tượng form, report... nói chung chức năng nào có liêu quan (hoặc tác động đến dữ liệu) đều phải điều khiển được bằng VBA .
1.3 Cuối cùng cũng không thể thiếu các chức năng (action) tương ứng trên form như các button (nó cũng được xem là đối tượng điều khiển nốt) : quan trọng nhất bất cứ trên form nào cũng phải có : cmdNew(thêm mới); cmdEdit(sửa); cmdDelete (xóa) với chú ý mấy cái name này nên thống nhất trên tất cả các form, report (cái chức năng view thì có trong menu rồi nên không cần trên form nữa)
Ví dụ:
tbl_menu (id, name, type, action, label, tooltip) trong đó type tương ứng với các đối tượng form, report, ...và action thường là click! tbl_perm (id, user, id_(menu hoặc đối tượng), view, addnew, edit, delete) ( view, addnew, edit, delete with type TRUE/FALSE)
Một user khi loged in thì phải gán cho nó một biến toàn cục dạng currentUser = username (gán lúc đăng nhập)
Bạn tạo một
public function user_perm(currentUser)
'- Chú ý chỉ xử lý false/ true chứ không phải xử lý các sự kiện đâu nhé (ví dụ cho phép thì botton nó hiện còn cấm chức năng nào thì nó sẽ mờ đi )
'xử lý view:
'xử lý addnew
'xử lý edit
'xử lý delete
end function
Hì hì bây giờ khi user đăng nhập phải làm được 2 chuyện:
1. gán biến có định cho user (đã nói ở trên)
2. Kiểm tra user thuộc group nào ->tham chiếu đến tbl_perm coi chức năng nào được cho phép (true), chức năng nào cấp (false) Lưu ý : nếu view=false thì các chức năng còn lại cũng false tuốt (nghĩa là user này không biết có tồn tại chức năng này trong phần mềm) còn lại thì cứ bình thường thôi
----------
Giả sử bạn là nhân viên trên form thu - chi được quyền view, addnew, edit , không được xóa khi bạn đăng nhập vào, quyền hạn của bạn có dạng:
tbl_perm(id, user của bạn, form thu chi, true, true, true, false) khi bạn truy cập vào form thu chi (đã được gắn function user_perm(curentUser) sẽ trả về giá trị:
user của bạn : view=true, addnew=true, edit=true, delete=false ~ (cmdAddnew.enable=true, cmdEdit.enable=true, cmdDelete.Enable=false)
------------
Thế là xong nhé. đang google mà nhảy vô thấy cái này nên viết luôn hổng biết áp dụng có được không nữa. hi hi