Phân quyền (RBAC)
Phạm vi hệ thống
authorization / RBAClà yêu cầu hệ thống, không phải feature.- Tài liệu này là nguồn chuẩn cho phân quyền toàn project (FE/BE/Mobile).
- Baseline hiện tại: Global RBAC.
- Định hướng mở rộng: Scoped RBAC + Data-level Access Control.
Quy ước
- Role: dynamic (admin tạo role, gán permission).
- Permission: static key theo format
<resource>:<action>[:<scope>]. - Naming role:
snake_case(admin,broker,investor, …). is_system=truecho role hệ thống mặc định.- Ownership check (
:own) xử lý ở service layer.
System tabs liên quan
- Tab
Global Matrix— matrix đang áp dụng. - Tab
Scoped Matrix— matrix mục tiêu mở rộng.
Role set hiện tại
| Role | Loại |
|---|---|
admin | system role |
user | system role |
broker | system role |
investor | system role |
Matrix theo nhóm quyền
Listing & Property
| Permission | Tên quyền | admin | user | broker | investor |
|---|---|---|---|---|---|
listing:read | Đọc tin | ✓ | ✓ | ✓ | ✓ |
listing:search | Tìm tin | ✓ | ✓ | ✓ | ✓ |
listing:create | Tạo tin | ✓ | ✓ | ✓ | ✓ |
listing:update:own | Sửa tin mình | ✓ | ✓ | ✓ | ✓ |
listing:update:any | Sửa mọi tin | ✓ | - | - | - |
listing:delete:own | Xóa tin mình | ✓ | ✓ | ✓ | ✓ |
listing:delete:any | Xóa mọi tin | ✓ | - | - | - |
listing:read:own | Xem tin mình | ✓ | ✓ | ✓ | ✓ |
listing:moderate | Kiểm duyệt tin | ✓ | - | - | - |
listing:approve | Duyệt tin | ✓ | - | - | - |
property:read | Đọc BĐS | ✓ | ✓ | ✓ | ✓ |
property:create | Tạo BĐS | ✓ | ✓ | ✓ | ✓ |
property:update:own | Sửa BĐS mình | ✓ | ✓ | ✓ | ✓ |
property:update:any | Sửa mọi BĐS | ✓ | - | - | - |
property:delete:own | Xóa BĐS mình | ✓ | ✓ | ✓ | ✓ |
property:delete:any | Xóa mọi BĐS | ✓ | - | - | - |
User & IAM
| Permission | Tên quyền | admin | user | broker | investor |
|---|---|---|---|---|---|
user:read | Đọc user | ✓ | ✓ | ✓ | ✓ |
user:read:self | Đọc hồ sơ mình | ✓ | ✓ | ✓ | ✓ |
user:update:self | Sửa hồ sơ mình | ✓ | ✓ | ✓ | ✓ |
user:delete:self | Xóa tài khoản mình | ✓ | ✓ | ✓ | ✓ |
user:manage | Quản lý user | ✓ | - | - | - |
role:read | Đọc role | ✓ | - | - | - |
role:create | Tạo role | ✓ | - | - | - |
role:update | Sửa role | ✓ | - | - | - |
role:delete | Xóa role | ✓ | - | - | - |
permission:read | Đọc permission | ✓ | - | - | - |
permission:assign | Gán permission | ✓ | - | - | - |
Subscription / Wallet / Payment
| Permission | Tên quyền | admin | user | broker | investor |
|---|---|---|---|---|---|
subscription:read | Đọc gói | ✓ | ✓ | ✓ | ✓ |
subscription:manage:own | Quản lý gói mình | ✓ | ✓ | ✓ | ✓ |
subscription:manage:any | Quản lý mọi gói | ✓ | - | - | - |
wallet:read:own | Đọc ví mình | ✓ | ✓ | ✓ | ✓ |
wallet:topup | Nạp ví | ✓ | ✓ | ✓ | ✓ |
wallet:transfer | Chuyển ví | ✓ | ✓ | ✓ | ✓ |
payment:read:own | Đọc thanh toán mình | ✓ | ✓ | ✓ | ✓ |
Masking / AI / Misc
| Permission | Tên quyền | admin | user | broker | investor |
|---|---|---|---|---|---|
masking_unlock:use | Mở khóa che | ✓ | ✓ | ✓ | ✓ |
masking_unlock:read:own | Xem mở khóa mình | ✓ | ✓ | ✓ | ✓ |
ai_marketing:use | Dùng AI marketing | ✓ | ✓ | ✓ | ✓ |
ai_marketing:manage | Quản trị AI marketing | ✓ | - | - | - |
owner_likelihood:read | Đọc owner likelihood | ✓ | ✓ | ✓ | ✓ |
owner_likelihood:recalculate | Tính lại owner likelihood | ✓ | - | - | - |
notification:read:own | Đọc thông báo mình | ✓ | ✓ | ✓ | ✓ |
notification:mark_read:own | Đánh dấu đã đọc | ✓ | ✓ | ✓ | ✓ |
upload:create | Tạo upload | ✓ | ✓ | ✓ | ✓ |
favorite:manage:self | Quản lý yêu thích | ✓ | ✓ | ✓ | ✓ |
affiliate:read | Đọc affiliate | ✓ | ✓ | ✓ | ✓ |
affiliate:manage | Quản lý affiliate | ✓ | - | - | - |
config:read | Đọc config | ✓ | - | - | - |
config:update | Sửa config | ✓ | - | - | - |
analytics:read | Đọc analytics | ✓ | - | - | - |
Tổng số quyền hiện tại
| Role | Số permission |
|---|---|
admin | 49 |
user | 28 |
broker | 28 |
investor | 28 |
Scope model mục tiêu
| Scope | Mô tả |
|---|---|
global | Quyền cấp toàn hệ thống |
hub | Quyền theo từng hub |
Global roles (giữ nguyên)
| Role | Scope |
|---|---|
admin | global |
user | global |
broker | global |
investor | global |
Hub roles (mới)
| Role | Scope |
|---|---|
hub_manager | hub |
hub_member | hub |
hub_viewer | hub |
Hub permission matrix
| Permission | Tên quyền | admin (global) | hub_manager | hub_member | hub_viewer |
|---|---|---|---|---|---|
hub:read | Đọc hub | ✓ | ✓ | ✓ | ✓ |
hub:create | Tạo hub | ✓ | - | - | - |
hub:manage:own | Quản lý hub mình | ✓ | ✓ | - | - |
hub:manage:any | Quản lý mọi hub | ✓ | - | - | - |
hub:member:read | Đọc thành viên hub | ✓ | ✓ | - | - |
hub:member:invite | Mời thành viên hub | ✓ | ✓ | - | - |
hub:member:remove | Xóa thành viên hub | ✓ | ✓ | - | - |
hub:role:assign | Gán role hub | ✓ | ✓ | - | - |
listing:read:hub | Đọc tin hub | ✓ | ✓ | ✓ | ✓ |
listing:update:hub | Sửa tin hub | ✓ | ✓ | - | - |
listing:update:hub_managed | Sửa tin hub quản lý | ✓ | ✓ | - | - |
Data-level matrix (mục tiêu)
Field-level
| Resource.Field | admin | hub_manager | hub_member | hub_viewer |
|---|---|---|---|---|
listing.phone | full | full | masked/full theo permission | masked |
listing.owner_email | full | full | masked/full theo permission | masked |
Row-level
| Dataset | admin | hub_manager | hub_member | hub_viewer |
|---|---|---|---|---|
| Listing thuộc hub đang truy cập | ✓ | ✓ | ✓ | ✓ |
| Listing ngoài hub | ✓ | - | - | - |
Listing do chính user tạo (own) | ✓ | ✓ | ✓ | ✓ |