Skip to content

Đang trong quá trình Xây dựng

Các chi tiết tính năng trong tài liệu này có thể thay đổi trong các giai đoạn nghiên cứu, thảo luận, thiết kế và triển khai.

Phân quyền / Permissions

Kiểm soát truy cập linh hoạt thông qua vai trò và gán quyền trực tiếp.

Tổng quan

Thuộc tínhGiá trị
ID ModuleCORE-02
Giai đoạnGiai đoạn 2
Mức độ ưu tiênCAO
Phụ thuộcQuản lý Người dùng

Module Phân quyền cho phép chủ doanh nghiệp kiểm soát quyền truy cập vào các tính năng và dữ liệu thông qua một mô hình phân quyền linh hoạt. Người dùng có thể có nhiều vai trò và cũng có thể nhận quyền trực tiếp thông qua thực thể PermissionMapping. Điều này đảm bảo an ninh đồng thời cho phép phân công trách nhiệm chi tiết.

┌─────────────────────────────────────────────────────────────────────────────┐
│                         MÔ HÌNH PHÂN QUYỀN                                   │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│                        ┌───────────────────┐                                 │
│                        │  PERMISSION       │                                 │
│                        │  MAPPING          │                                 │
│                        └─────────┬─────────┘                                 │
│                                  │                                           │
│              ┌───────────────────┼───────────────────┐                       │
│              │                   │                   │                       │
│              ▼                   ▼                   ▼                       │
│    ┌─────────────────┐  ┌─────────────┐  ┌─────────────────┐                │
│    │      NGƯỜI DÙNG │  │    VAI TRÒ    │  │   QUYỀN         │                │
│    │                 │  │             │  │                 │                │
│    │  Có thể có:     │  │  Chứa:      │  │  permission_id  │                │
│    │  - Nhiều vai trò│  │  các quyền  │  │ (vd: orders.*)  │                │
|    │  - Quyền trực tiếp│  │             │  │                 │                │
│    └─────────────────┘  └─────────────┘  └─────────────────┘                │
│                                                                              │
│    Ví dụ:                                                                    │
│    ├── Người dùng "Nguyễn Văn A" → Vai trò: [Thu ngân, Kho] + Trực tiếp: [reports.sales]│
│    └── Người dùng "Trần Thị B"   → Vai trò: [Quản lý] + Trực tiếp: [settings.system]   │
│                                                                              │
│    Quyền hiệu lực = Hợp(Quyền của các Vai trò) + Quyền Trực tiếp              │
│                                                                              │
└─────────────────────────────────────────────────────────────────────────────┘

Các phương pháp Gán quyền

Phương phápMô tảTrường hợp Sử dụng
Qua Vai tròNgười dùng kế thừa tất cả các quyền từ các vai trò được gánCác mẫu truy cập tiêu chuẩn
Trực tiếpQuyền được gán trực tiếp cho người dùng qua PermissionMappingCác trường hợp ngoại lệ, truy cập tạm thời
Kết hợpNgười dùng nhận được hợp của vai trò + quyền trực tiếpKiểm soát truy cập linh hoạt

User Stories

Giai đoạn 2 - Quản lý Vai trò & Phân quyền

IDVới vai trò...Tôi muốn...Để...
US-01Chủ doanh nghiệpTạo các vai trò tùy chỉnhtôi có thể định nghĩa các mức truy cập
US-02Chủ doanh nghiệpGán quyền cho các vai tròcác vai trò có các khả năng cụ thể
US-03Chủ doanh nghiệpGán nhiều vai trò cho nhân viênnhân viên có thể có trách nhiệm kết hợp
US-04Chủ doanh nghiệpGán quyền trực tiếp cho nhân viêntôi có thể cấp quyền ngoại lệ mà không cần tạo vai trò mới
US-05Chủ doanh nghiệpSử dụng các vai trò được định sẵntôi có thể nhanh chóng thiết lập các vai trò phổ biến
US-06Chủ doanh nghiệpXem nhân viên có thể truy cập những gìtôi có thể kiểm tra các quyền hiệu lực
US-07Nhân viênChỉ truy cập các tính năng được phép của tôitôi không thể thực hiện các thay đổi trái phép
US-08Chủ doanh nghiệpThu hồi quyềntôi có thể hạn chế quyền truy cập ngay lập tức
US-09Chủ doanh nghiệpXem các quyền hiệu lựctôi có thể thấy các quyền kết hợp từ vai trò + trực tiếp

Ma trận Tính năng

Tính năngGĐ 1GĐ 2GĐ 3Mô tả
Toàn quyền của Chủ sở hữuChủ sở hữu luôn có tất cả các quyền
Tạo vai tròTạo các vai trò tùy chỉnh
Vai trò được định sẵn5 vai trò tích hợp sẵn
Gán quyền cho vai tròGán các quyền cho vai trò
Gán nhiều vai tròGán nhiều vai trò cho người dùng
Gán quyền trực tiếpGán quyền trực tiếp cho người dùng
Thực thể PermissionMappingLưu trữ quyền thống nhất cho người dùng/vai trò
Xem quyền hiệu lựcXem các quyền kết hợp từ vai trò + trực tiếp
Kiểm tra quyềnXem ma trận phân quyền
Phân quyền cấp cửa hàngCác vai trò khác nhau cho mỗi cửa hàng
Quyền dựa trên thời gianQuyền có hiệu lực trong giờ làm việc

Các loại Quyền

┌──────────────────────────────────────────────────────────────────┐
│                         CÂY PHÂN QUYỀN                           │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ├── BÁN HÀNG                       ├── KHO HÀNG                 │
│  │   ├── orders.create              │   ├── inventory.view       │
│  │   ├── orders.view                │   ├── inventory.receive    │
│  │   ├── orders.edit                │   ├── inventory.transfer   │
│  │   ├── orders.delete              │   ├── inventory.adjust     │
│  │   ├── payments.process           │   └── inventory.export     │
│  │   └── payments.refund            │                            │
│  │                                  ├── BÁO CÁO                  │
│  ├── SẢN PHẨM                       │   ├── reports.sales        │
│  │   ├── products.view              │   ├── reports.inventory    │
│  │   ├── products.create            │   ├── reports.tax          │
│  │   ├── products.edit              │   └── reports.export       │
│  │   ├── products.delete            │                            │
│  │   └── products.price             ├── CÀI ĐẶT                  │
│  │                                  │   ├── settings.users       │
│  ├── HÓA ĐƠN                        │   ├── settings.roles       │
│  │   ├── invoices.create            │   ├── settings.store       │
│  │   ├── invoices.view              │   └── settings.system      │
│  │   └── invoices.void              │                            │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

Chi tiết Quyền

QuyềnMô tảLoại
orders.createTạo đơn hàng mớiBán hàng
orders.viewXem lịch sử đơn hàngBán hàng
orders.editSửa đổi đơn hàng hiện cóBán hàng
orders.deleteHủy/xóa đơn hàngBán hàng
payments.processXử lý thanh toánBán hàng
payments.refundThực hiện hoàn tiềnBán hàng
products.viewXem danh mục sản phẩmSản phẩm
products.createThêm sản phẩm mớiSản phẩm
products.editChỉnh sửa chi tiết sản phẩmSản phẩm
products.deleteXóa sản phẩmSản phẩm
products.priceThay đổi giáSản phẩm
inventory.viewXem mức tồn khoKho hàng
inventory.receiveNhận hàngKho hàng
inventory.transferChuyển khoKho hàng
inventory.adjustĐiều chỉnh khoKho hàng
invoices.createTạo hóa đơn thuếHóa đơn
invoices.viewXem hóa đơnHóa đơn
invoices.voidHủy hóa đơnHóa đơn
reports.salesXem báo cáo bán hàngBáo cáo
reports.inventoryXem báo cáo tồn khoBáo cáo
reports.taxXem báo cáo thuếBáo cáo
reports.exportXuất dữ liệu báo cáoBáo cáo
settings.usersQuản lý người dùngCài đặt
settings.rolesQuản lý vai tròCài đặt
settings.storeCài đặt cửa hàngCài đặt
settings.systemCấu hình hệ thốngCài đặt

Các Vai trò được Định sẵn

Vai tròTiếng ViệtQuyềnTrường hợp Sử dụng
Chủ sở hữuChủ hộTẤT CẢChủ doanh nghiệp (không thể sửa đổi)
Quản lýQuản lýTất cả trừ settings.systemQuản lý cửa hàng
Thu ngânThu ngânorders.*, payments.process, products.viewNhân viên bán hàng
KhoKhoinventory.*, products.viewNhân viên kho
Người xemXemTất cả các quyền .viewKế toán, kiểm toán viên

Các Luồng chính

Luồng Tạo Vai trò

Luồng Kiểm tra Quyền

Luồng Gán quyền Trực tiếp

Kế thừa Quyền


Quy tắc Nghiệp vụ

ID Quy tắcQuy tắcMô tả
BR-01Chủ sở hữu bất biếnVai trò Chủ sở hữu không thể sửa đổi hoặc xóa
BR-02Chủ sở hữu luôn toàn quyềnChủ sở hữu luôn có tất cả các quyền
BR-03Tên vai trò duy nhấtTên vai trò phải là duy nhất trong mỗi tổ chức
BR-04Phân cấp quyềnKý tự đại diện * cấp tất cả các quyền con
BR-05Cho phép nhiều vai tròNgười dùng có thể được gán nhiều vai trò
BR-06Quyền trực tiếpNgười dùng có thể có các quyền được gán trực tiếp qua PermissionMapping
BR-07Quyền hiệu lựcHiệu lực = Hợp của tất cả quyền vai trò + quyền trực tiếp
BR-08Không tự hạ cấpNgười dùng không thể xóa quyền quản trị của chính mình
BR-09Hiệu lực tức thìCác thay đổi về quyền có hiệu lực ngay lập tức
BR-10Bảo vệ vai trò định sẵnCác vai trò được định sẵn không thể bị xóa
BR-11Xóa theo tầngXóa một vai trò sẽ xóa nó khỏi người dùng
BR-12Nhật ký kiểm toánTất cả các thay đổi về quyền đều được ghi lại
BR-13Loại PermissionMappingPermissionMapping có thể nhắm đến Người dùng hoặc Vai trò

Tiêu chí Chấp nhận

AC-01: Tạo Vai trò

CHO   một chủ sở hữu trên trang Phân quyền
KHI   họ tạo một vai trò mới với tên và các quyền
THÌ   - Vai trò được tạo với tên duy nhất
      - PermissionMappings được tạo cho vai trò
      - Vai trò xuất hiện trong danh sách vai trò
      - Vai trò có thể được gán cho người dùng

AC-02: Gán nhiều Vai trò

CHO   một chủ sở hữu đang quản lý quyền của nhân viên
KHI   họ gán nhiều vai trò cho một người dùng
THÌ   - Tất cả các vai trò đã chọn đều được gán
      - Người dùng nhận được hợp của tất cả các quyền từ vai trò
      - Các quyền hiệu lực được hiển thị chính xác

AC-03: Gán quyền Trực tiếp

CHO   một chủ sở hữu đang xem quyền của một nhân viên
KHI   họ thêm một quyền trực tiếp qua PermissionMapping
THÌ   - Quyền được thêm trực tiếp vào người dùng
      - Quyền xuất hiện trong các quyền hiệu lực của người dùng
      - Quyền hoạt động độc lập với các vai trò

AC-04: Tính toán Quyền hiệu lực

CHO   một người dùng có vai trò [Thu ngân, Kho] và quyền trực tiếp [reports.sales]
KHI   kiểm tra các quyền hiệu lực của họ
THÌ   - Hiệu lực = Quyền Thu ngân + Quyền Kho + reports.sales
      - Không có quyền trùng lặp trong danh sách cuối cùng
      - Tất cả ba nguồn đều đóng góp vào quyền truy cập

AC-05: Kiểm tra Quyền lúc Chạy

CHO   một nhân viên chỉ có vai trò "Thu ngân"
KHI   họ cố gắng truy cập các tính năng kho
THÌ   - Menu kho bị ẩn/vô hiệu hóa
      - Truy cập URL trực tiếp hiển thị "Truy cập bị từ chối"
      - Các cuộc gọi API trả về 403 Forbidden

AC-06: Sửa đổi Vai trò

CHO   một chủ sở hữu đang sửa đổi một vai trò tùy chỉnh
KHI   họ thêm/xóa các quyền và lưu
THÌ   - PermissionMappings được cập nhật cho vai trò
      - Tất cả người dùng có vai trò này đều bị ảnh hưởng
      - Các phiên hoạt động phản ánh các quyền mới

AC-07: Bảo vệ Vai trò được Định sẵn

CHO   5 vai trò được định sẵn (Chủ sở hữu, Quản lý, Thu ngân, Kho, Người xem)
KHI   người dùng cố gắng xóa chúng
THÌ   - Tùy chọn xóa bị vô hiệu hóa
      - Sửa đổi được cho phép đối với Quản lý, Thu ngân, Kho, Người xem
      - Vai trò Chủ sở hữu không thể bị sửa đổi chút nào

Phụ thuộc

Phân quyền
├── Yêu cầu: Quản lý Người dùng
├── Yêu cầu bởi: Tất cả các module khác (ủy quyền)
├── Chứa: PermissionMapping (thực thể cốt lõi)
└── Tích hợp: Không có (nội bộ)
ModuleMối quan hệ
Quản lý Người dùngNgười dùng có nhiều vai trò + quyền trực tiếp
Tổ chứcVai trò & PermissionMappings có phạm vi trong tổ chức
Điểm bánVai trò & quyền cấp cửa hàng (GĐ3)

Điểm Tích hợp

┌─────────────────────────────────────────────────────────────────┐
│                 TÍCH HỢP KIỂM TRA QUYỀN                         │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  Mọi module đều kiểm tra quyền trước khi thực hiện hành động:    │
│                                                                  │
│  ┌─────────┐    ┌──────────────────────┐    ┌───────────┐       │
│  │ Hành động│───▶│   Auth Middleware    │───▶│  Được phép │       │
│  │ Module  │    │                      │    │  Có / Không│       │
│  └─────────┘    │ 1. Lấy vai trò user  │    └───────────┘       │
│                 │ 2. Lấy quyền vai trò  │                        │
│                 │ 3. Lấy quyền trực tiếp│                        │
│                 │ 4. Tính toán hợp      │                        │
│                 │ 5. Kiểm tra quyền    │                        │
│                 └──────────────────────┘                        │
│                                                                  │
│  - Frontend: Ẩn/vô hiệu hóa giao diện dựa trên quyền hiệu lực    │
│  - Backend: Trả về 403 nếu không có trong quyền hiệu lực         │
│  - Kiểm toán: Ghi lại tất cả các lần kiểm tra quyền              │
│                                                                  │
│  Truy vấn PermissionMapping:                                     │
│  SELECT permission_code FROM permission_mapping                  │
│  WHERE (target_type='ROLE' AND target_id IN user_roles)          │
│     OR (target_type='USER' AND target_id = user_id)              │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Ảnh chụp màn hình

Ảnh chụp màn hình

Ảnh chụp màn hình sẽ được thêm sau khi triển khai giao diện người dùng.


Các Module Liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.