Thiết kế phân quyền cho phần mềm quản trị: ba tầng câu hỏi

Vào được đâu, làm được gì, và trên dữ liệu nào. Câu thứ ba hay bị bỏ quên và là câu đắt nhất nếu bổ sung muộn, vì nó chạm vào mọi truy vấn trong hệ thống.

Thiết kế phân quyền cho phần mềm quản trị: ba tầng câu hỏi

Phân quyền là phần dễ làm sai nhất trong phần mềm quản trị, vì lúc bắt đầu nó trông rất đơn giản: vài vai trò, vài màn hình. Rắc rối đến sau, khi doanh nghiệp có thêm chi nhánh, thêm cấp duyệt, và khi ai đó hỏi vì sao trưởng phòng này lại xem được lương của phòng khác.

Ba tầng câu hỏi cần phân biệt

Mọi hệ thống phân quyền đều trả lời ba câu hỏi khác nhau, và trộn chúng lại là nguồn gốc của rắc rối:

  • Vào được đâu — người này mở được màn hình nào.
  • Làm được gì — xem, thêm, sửa, xoá, duyệt, xuất dữ liệu.
  • Trên dữ liệu nào — chỉ dữ liệu của mình, của phòng mình, của chi nhánh mình, hay toàn công ty.

Hai câu đầu thường được làm ngay từ đầu. Câu thứ ba hay bị bỏ quên, và nó chính là câu đắt nhất nếu bổ sung muộn, vì nó chạm vào mọi truy vấn dữ liệu trong hệ thống.

Vai trò hay quyền chi tiết

Mô hình bền nhất là hai lớp: hệ thống chỉ hiểu quyền chi tiết, còn vai trò là tập hợp quyền đặt sẵn cho tiện gán.

  • Kiểm tra quyền trong mã nguồn luôn hỏi "có quyền duyệt chứng từ không", không bao giờ hỏi "có phải kế toán trưởng không".
  • Khi doanh nghiệp đẻ ra một chức danh mới, chỉ cần tạo vai trò mới với tập quyền tương ứng — không phải sửa mã.
  • Cho phép gán quyền lẻ ngoài vai trò, vì thực tế luôn có ngoại lệ. Nhưng phải xem được ai đang có quyền lẻ nào.

Bốn cấp phạm vi dữ liệu

Với doanh nghiệp nhiều đơn vị, nên thiết kế sẵn thang phạm vi ngay từ đầu, kể cả khi hiện tại chỉ dùng một mức:

  • Của tôi — bản ghi do chính người đó tạo hoặc phụ trách.
  • Của nhóm/phòng — theo cây tổ chức, cần xử lý cả trường hợp phòng có phòng con.
  • Của đơn vị/chi nhánh.
  • Toàn hệ thống.

Điểm kỹ thuật quan trọng: phạm vi phải được áp dụng ở tầng truy vấn dữ liệu, không phải ở giao diện. Ẩn nút trên màn hình không ngăn được người biết gọi thẳng API.

Những chỗ hay bị thủng

Quy tắc kiểm tra: nếu một người sao chép đường dẫn của đồng nghiệp và dán vào trình duyệt của mình, hệ thống phải chặn — không phải vì họ không thấy nút, mà vì máy chủ từ chối.
  • Báo cáo và xuất dữ liệu. Màn hình danh sách đã lọc đúng, nhưng chức năng xuất Excel lại chạy một truy vấn khác không lọc.
  • Tìm kiếm chung. Ô tìm kiếm toàn hệ thống rất hay lộ tên khách hàng hoặc tên tệp mà người dùng không được xem.
  • Thông báo và email. Nội dung thông báo vô tình chứa thông tin mà người nhận không có quyền xem trong hệ thống.
  • Đường dẫn tệp đính kèm. Tệp lưu trên kho lưu trữ nhưng đường dẫn đoán được, không kiểm tra quyền khi tải.
  • Quyền còn sót sau khi đổi vị trí. Người chuyển bộ phận vẫn giữ quyền cũ vì không ai thu hồi.

Thiết kế để về sau còn kiểm tra được

Phân quyền không chỉ là chặn, mà còn là giải thích được. Những thứ nên có ngay từ đầu:

  • Màn hình tra cứu quyền theo người: một người đang có những quyền gì, đến từ vai trò nào.
  • Nhật ký thay đổi quyền: ai cấp, cấp lúc nào. Đây là thứ đầu tiên bị hỏi khi có sự cố rò rỉ.
  • Nhật ký truy cập dữ liệu nhạy cảm: ai đã mở bảng lương, ai đã xuất danh sách khách hàng.
  • Kiểm thử tự động cho các luật quan trọng: mỗi luật phân quyền quan trọng nên có một bài kiểm thử khẳng định người không đủ quyền bị từ chối.

Vài nguyên tắc vận hành

  • Mặc định là từ chối. Quyền phải được cấp tường minh; endpoint mới chưa gắn quyền thì không ai vào được, thay vì ai cũng vào được.
  • Ít vai trò, đặt tên theo công việc. "Kế toán công nợ" dễ hiểu hơn "Vai trò 3".
  • Rà soát định kỳ. Mỗi quý, in danh sách người có quyền cao nhất và xác nhận lại với quản lý.
  • Tài khoản dùng chung là điểm mù. Khi nhiều người dùng chung một tài khoản, mọi nhật ký đều mất giá trị.

Phân quyền làm đúng ngay từ đầu tốn thêm vài ngày. Làm lại khi hệ thống đã chạy tốn nhiều hơn thế rất nhiều, vì phải rà lại từng truy vấn đã viết.

Quay lại danh sách bài viết

Cần tư vấn cho bài toán cụ thể của bạn?

Những gì viết ở đây là nguyên tắc chung. Doanh nghiệp của bạn có bối cảnh riêng — hãy để đội ngũ NinePlus trao đổi trực tiếp.