Ma trận phân quyền
Trang này quy định mỗi vai trò làm được gì. Đây là căn cứ để lập trình và để kiểm thử.
Nguyên tắc chung
Quyền được xác định bởi hai yếu tố kết hợp:
- Vai trò — Ban Giám hiệu, Trưởng phòng hay Nhân viên
- Phạm vi dữ liệu — được đụng tới công việc của ai
| Vai trò | Phạm vi dữ liệu |
|---|---|
| Ban Giám hiệu | Toàn trường |
| Trưởng phòng | Phòng mình phụ trách |
| Nhân viên | Công việc được giao cho mình |
Một người có quyền làm một thao tác chỉ khi vai trò cho phép và dữ liệu nằm trong phạm vi của họ.
Công việc
| Thao tác | Ban Giám hiệu | Trưởng phòng | Nhân viên |
|---|---|---|---|
| Xem danh sách công việc | Toàn trường | Phòng mình | Việc của mình |
| Xem chi tiết một việc | Toàn trường | Phòng mình | Việc của mình |
| Tạo việc mới | Có | Có | Không |
| Sửa nội dung việc | Toàn trường | Phòng mình | Không |
| Giao người phụ trách | Có | Trong phòng mình | Không |
| Chuyển giao lại người khác | Có | Trong phòng mình | Không |
| Đặt và sửa hạn hoàn thành | Có | Phòng mình | Không |
| Đặt mức ưu tiên | Có | Phòng mình | Không |
| Nhận việc (Mới giao → Đang làm) | Có | Phòng mình | Việc của mình |
| Trả lại để làm tiếp (Chờ xác nhận → Đang làm) | Việc mình giao | Việc mình giao | Không |
| Chuyển sang Chờ xác nhận | Có | Phòng mình | Việc của mình |
| Xác nhận Hoàn thành | Việc mình giao | Việc mình giao | Không |
| Huỷ việc | Có | Phòng mình | Không |
| Bình luận | Toàn trường | Phòng mình | Việc của mình |
| Đính kèm tệp | Toàn trường | Phòng mình | Việc của mình |
| Xoá vĩnh viễn | Không | Không | Không |
:::note Vì sao không ai xoá được Theo quy tắc BR-03, công việc chỉ được huỷ chứ không xoá. Phần mềm không có chức năng xoá vĩnh viễn cho bất kỳ vai trò nào. :::
Tài khoản người dùng
| Thao tác | Ban Giám hiệu | Trưởng phòng | Nhân viên |
|---|---|---|---|
| Xem danh sách tài khoản | Toàn trường | Phòng mình | Không |
| Tạo tài khoản mới | Có | Không | Không |
| Sửa thông tin tài khoản | Có | Không | Không |
| Gán và đổi vai trò | Có | Không | Không |
| Khoá tài khoản | Có | Không | Không |
| Đặt lại mật khẩu cho người khác | Có | Không | Không |
| Đổi mật khẩu của mình | Có | Có | Có |
:::note Vì sao chỉ Ban Giám hiệu quản lý tài khoản Bản dùng thử chỉ cho Ban Giám hiệu tạo, sửa và khoá tài khoản. Trưởng phòng không có quyền này.
Lý do: quy mô một văn phòng thì số lần tạo tài khoản rất ít, gom về một đầu mối là đủ và tránh được nguy cơ nâng quyền ngoài kiểm soát. Trưởng phòng cần thêm người thì đề nghị qua kênh hành chính bình thường.
Nếu sau này mở rộng ra nhiều phòng ban và việc này thành nút thắt, có thể thêm vai trò "Người quản trị" — thêm một dòng vào bảng vai trò, không phải sửa cấu trúc dữ liệu. :::
Báo cáo và màn hình theo dõi
| Thao tác | Ban Giám hiệu | Trưởng phòng | Nhân viên |
|---|---|---|---|
| Xem màn hình tổng quan | Toàn trường | Phòng mình | Không |
| Xem danh sách việc trễ hạn | Toàn trường | Phòng mình | Việc của mình |
| Xem màn hình việc trễ hạn của phòng | Có | Có | Không |
| Xem màn hình việc của tôi | Có | Có | Có |
| Dùng bộ lọc | Toàn trường | Phòng mình | Việc của mình |
| Xuất báo cáo Excel | Toàn trường | Phòng mình | Không |
Các trường hợp đặc biệt
Những tình huống dưới đây dễ gây tranh cãi khi lập trình, nên quy định rõ.
| Tình huống | Xử lý |
|---|---|
| Trưởng phòng tự giao việc cho chính mình | Được. Khi đó vừa là người giao vừa là người phụ trách, và tự xác nhận hoàn thành được. |
| Ban Giám hiệu giao việc thẳng cho nhân viên, không qua trưởng phòng | Được. Khi đó Ban Giám hiệu là người giao việc và là người xác nhận hoàn thành. |
| Nhân viên được chuyển sang phòng khác | Việc cũ vẫn thuộc phòng cũ. Trưởng phòng mới không thấy việc cũ của người đó. |
| Tài khoản bị khoá nhưng còn việc chưa xong | Việc vẫn còn, hiển thị tên người phụ trách kèm ghi chú đã khoá. Trưởng phòng phải chuyển giao lại cho người khác. |
| Nhân viên kiêm nhiệm hai phòng | Giao diện bản dùng thử chỉ cho chọn một phòng. Cấu trúc dữ liệu đã hỗ trợ sẵn nhiều phòng, mở ra sau này không cần chuyển đổi dữ liệu. |
:::note Kiêm nhiệm được xử lý thế nào Bản dùng thử quy định mỗi người thuộc đúng một phòng, vì đơn giản hơn cho người dùng và đủ cho phạm vi Văn phòng Hành chính.
Nhưng cơ sở dữ liệu không khoá cứng điều đó: bảng nối user_departments cho phép một người thuộc nhiều phòng với vai trò khác nhau. Bản dùng thử chỉ tạo một dòng cho mỗi người. Khi cần hỗ trợ kiêm nhiệm thật, chỉ mở khoá ở giao diện và thêm dòng — dữ liệu cũ giữ nguyên.
Xem Mô hình dữ liệu. :::
Cách kiểm tra khi lập trình
Mỗi lần xử lý một yêu cầu từ người dùng, phần mềm phải kiểm tra theo thứ tự:
- Người này đã đăng nhập chưa
- Vai trò của họ có được phép làm thao tác này không
- Dữ liệu họ đang đụng tới có nằm trong phạm vi của họ không
Thiếu một trong ba bước là lỗ hổng. Đặc biệt bước 3 hay bị bỏ sót: nhân viên A có thể sửa địa chỉ trên trình duyệt để mở việc của nhân viên B, nên phải kiểm tra ở phía máy chủ chứ không chỉ ẩn nút trên giao diện.