[Access] Hỏi Phân quyền - Làm sao từng user chỉ sửa được những gì mình nhập?

Liên hệ QC

quoc_huy1702

Thành viên hoạt động
Tham gia
9/6/11
Bài viết
132
Được thích
20
Nghề nghiệp
NVVP
PhanQuyenTrongAccess2.jpg
Mình hiện có 3 Table; 3 Form như trên
Table User; Table KHONHAP; Table KHOXUAT, Form KHONHAP; Form KHOXUAT
1./Mình muốn ở form KHONHAP; form KHOXUAT, khi User đăng nhập vào và nhập liệu thì chỗ trường USER ở Form sẽ tự động điền đúng user đó vào ô đó; tuy nhiên user đó lại ko chỉnh sửa được ô này ( hoặc ẩn nó đi)
Ví dụ: User là Huyền; khi đăng nhập; mở form KHOXUAT thì ô USER sẽ tự động cập nhập Huyền vào ô USER


2./Ngoài ra có 3 dạng user


2.1/ User chỉ đọc được dữ liệu; xem báo cáo chứ ko chỉnh sửa gì được (cái này cho sếp)


2.2/ User được quyền chỉnh sửa dữ liệu . User này chỉ chỉnh được dữ liệu mình đã nhập vào; ko chỉnh sửa được dữ liệu của user khác. ( cái này cho thủ kho và nhân viên bán hàng)


2.3/ User Toàn quyền thì được chỉnh sửa dữ liệu của tất cả user khác.( cái này admin xài)


Vậy phải làm thế nào để đạt được điều đó? Đang bí chỗ này
 
Lần chỉnh sửa cuối:
View attachment 74300
Mình hiện có 3 Table; 3 Form như trên
Table User; Table KHONHAP; Table KHOXUAT, Form KHONHAP; Form KHOXUAT
1./Mình muốn ở form KHONHAP; form KHOXUAT, khi User đăng nhập vào và nhập liệu thì chỗ trường USER ở Form sẽ tự động điền đúng user đó vào ô đó; tuy nhiên user đó lại ko chỉnh sửa được ô này ( hoặc ẩn nó đi)
Ví dụ: User là Huyền; khi đăng nhập; mở form KHOXUAT thì ô USER sẽ tự động cập nhập Huyền vào ô USER


2./Ngoài ra có 3 dạng user


2.1/ User chỉ đọc được dữ liệu; xem báo cáo chứ ko chỉnh sửa gì được (cái này cho sếp)


2.2/ User được quyền chỉnh sửa dữ liệu . User này chỉ chỉnh được dữ liệu mình đã nhập vào; ko chỉnh sửa được dữ liệu của user khác. ( cái này cho thủ kho và nhân viên bán hàng)


2.3/ User Toàn quyền thì được chỉnh sửa dữ liệu của tất cả user khác.( cái này admin xài)


Vậy phải làm thế nào để đạt được điều đó? Đang bí chỗ này
Chào Bạn,
Bản thân Microsoft Access không có cơ chế bảo mật đáp ứng được hoàn toàn nhu cầu trên của Bạn.
Xin gợi ý cách làm như sau:
1. Trước hết phải dùng chức năng phân quyền có sẵn của MS. Access để áp dụng các giới hạn truy xuất đến các bảng dữ liệu.
Sau đó, phải cho "ẩn mặt" file hệ thống có ghi group và user của MS. Access (mặc định file này tên là system.mdw).
Khi đó, để chạy ứng dụng ta phải viết 1 file chạy để chỉ định cho Access khởi động ứng dụng với file hệ thống này.
Và việc cũng cần làm là: phải dịch file ứng dụng sang MDE trước khi cho phát hành sử dụng trên hệ thống. Việc này nhằm ngăn chặn không cho user sửa và xem các form, report, module đã thiết kế.

Mục đích của việc này là không cho user thoải mái open hoặc import / export trực tiếp các bảng dữ liệu này.
Nên tạo từng nhóm user (Group) với các giới hạn truy xuất cụ thể, để thuận tiện khi áp dụng giới hạn cho các user.

2. Tạo 1 bảng dữ liệu thuộc dạng "Msys" hoặc "Usys" để đăng ký các thẩm quyền truy xuất dữ liệu cụ thể cho từng đối tượng của ứng dụng (table, form, report), đồng thời quy định thẩm quyền truy xuất bảng dữ liệu này chỉ dành toàn quyền riêng cho người quản trị, các user khác chỉ có quyền đọc record dành riêng cho mình.
Do vậy, khi thiết kế các bảng dữ liệu Bạn phải có 1 field để theo dõi user nào là người đã tạo ra từng record, và mỗi khi 1 record mới được chèn vào bảng dữ liệu (After_Insert Event) ứng dụng của Bạn phải cho đăng ký user hiện hành vào field này. Ta có thể dùng thuộc tính "Defaul Value" của filed để chèn tự động giá trị vào field này với khai báo Default Value = CurrentUser().

Sau đây là một cấu trúc đề nghị:
- Tên bảng: UsysPhanquyen
- Gồm các trường (Fields):
+ ObjectName (Text): đăng ký tên các đối tượng cần quản lý
+ Group (Text): đăng ký tên nhóm user được phân quyền
+ User (Text): đăng ký tên user được phân quyền (chỉ đăng ký rong trường hợp cần áp dụng riêng ngoài các giới hạn chung áp dụng cho Group)
+ RO (boolean): thẩm quyền chỉ đọc
+ EDIT (boolean): thẩm quyền được hiệu chỉnh dữ liệu
+ DELETE (boolean): thẩm quyền được xoá
+ FULL (boolean): có toàn quyền

3. Cách áp dụng: với các tác vụ truy xuất đối tượng trong ứng dụng ta sẽ cho kiểm tra khi có sự kiện mở đối tượng (Open Event) bằng Open_Event, trong đó:
+ Dò tìm thẩm quyền của User tương ứng với đối tượng đã được đăng ký trong bảng "UsysPhanquyen" nêu trên, nếu thoả thì mới cho mở, bằng không thì ngăn lại.
+ Xin gợi ý: hàm để xác định user đang làm việc trong phiên hiện hành là: CurrentUser()

Mấy gợi ý, Bạn thử xem sao nhé.

Bổ sung Ngày 30/11/2011: đính kèm file tải về từ link: http://www.mediafire.com/download.php?kb30w1t59vt7jk3 như một gợi ý để các Bạn tham khảo nhé. Do chỉ là gợi ý nên chỉ mang tính sơ lược.
1. Ứng dụng (là mdb của MS. Access 2003) được tổ chức với file data đặt riêng bên trong folder DATA (là folder con của Folder ứng dụng)

2. Đây là ứng dụng đã được set level security, nên xin khởi động ứng dụng bằng RunMyApp.mdb với Account như sau:
+ Name: qtv với Password: quantrivien
+ Name: nv1 với Password: nv1
+ Name: nv2 với Password: nv2

3. Xin thông tin thêm: bên trong ứng dụng, cái nào bằng tiếng Anh là nguyên bản của Microsoft, còn tiếng Việt là do tôi "chế" thêm theo gợi ý bên trên.

4. Các Bạn cũng có thể tham khảo thêm tài liệu của Microsoft về Bảo mật trong MS. Access tại link sau: http://support.microsoft.com/?id=165009
 
Lần chỉnh sửa cuối:
cám ơn bạn Lehongduc đã gợi ý
mình đã tìm về các ví dụ về phân quyền nhưng chưa có vd nào vừa ý cả
hic hic ngồi chờ bác Dom giúp đỡ và tiếp tục mầy mò
 
cám ơn anh lehongduc và anh Dom
đã dành thời gian và công sức viết bài giúp em
chân thành cám ơn 2 anh
e đang ngâm cứu, mong rằng áp dụng vào được ứng dụng của mình
hihihhih nếu có điều gì chưa biết e lại phiền 2 anh ạ
 
Mình cũng muốn viết 1 file quản lý kho bằng access, và phân quyền truy cập giống như bác "dailykem" và "quoc_huy1702". Các bác đã giải quyết được vấn đề trên chưa vậy, hướng dẫn cho mình với. Có thể cho mình xin file ví dụ để xem cho rõ hơn không ? Thank các bác
 
Web KT
Back
Top Bottom