- 機台日誌:對齊 Luxury UI 規範,實作整合式佈局與分頁組件。 - 多語系:完成機台日誌繁、英、日三語系翻譯與動態處理。 - UI 規範:更新 SKILL.md 定義「標準列表 Bible」。 - 後端:完善 TenantScoped 隔離邏輯,修復儀表板死循環與 User Model 缺失。 - IoT:擴展機台、會員 Model 並建立交易、商品、狀態等核心表結構。 - 基礎設施:設置台北時區與 Docker 環境變數同步。
2.0 KiB
2.0 KiB
多租戶與權限架構實作規範 (RBAC Rules)
本文件定義 Star Cloud 系統的多租戶與權限(RBAC)實作標準,開發者必須嚴格遵守以下準則,以確保資料隔離與安全性。
1. 資料隔離核心 (Data Isolation)
1.1 租戶欄位 (company_id)
任何屬於租戶資源的資料表(如 users, machines, transactions 等),必須包含 company_id 欄位。
company_id = null:系統管理員(SaaS 平台營運商)。company_id = {ID}:特定租戶。
1.2 自動過濾 (Global Scopes)
- 資源 Model 必須套用
TenantScopedTrait。 - 當非系統管理員登入時,所有 Eloquent 查詢必須自動加上
where('company_id', auth()->user()->company_id)。 - 嚴禁在 Controller 手動撰寫重複的過濾邏輯,除非是複雜的 Raw SQL。
1.3 寫入安全
- 建立新資源時,必須在背景強制綁定
company_id,禁止由前端傳參決定。 - 範例:
$model->company_id = Auth::user()->company_id;
2. 權限開發規範 (spatie/laravel-permission)
2.1 租戶感知角色 (Tenant-Aware Roles)
roles資料表已擴充company_id欄位。- 撈取角色清單供指派時,必須過濾
company_id或為 null 的系統預設角色。
2.2 權限命名
- 權限名稱應遵循
[module].[action]格式(例如machine.view,machine.edit)。 - 所有租戶共用相同的權限定義。
3. 介面安全 (UI/Blade)
3.1 身份判定 Helper
使用以下方法進行區分:
$user->isSystemAdmin(): 判斷是否為平台營運人員。$user->isTenant(): 判斷是否為租戶帳號。
3.2 Blade 指令
- 涉及全站管理或跨租戶功能,必須使用
@if(auth()->user()->isSystemAdmin())包裹。 - 確保租戶登入時,不會在 Sidebar 或選單看到不屬於其權限範圍的項目。
4. API 安全
- 所有的 API Route 應預設包含
CheckTenantAccessMiddleware。 - 嚴禁透過 URL 修改 ID 存取不屬於該租戶的資料,必須依賴
company_id的 Scope 過濾。