feat: 實作使用者啟停用功能與安全性強化
- 新增使用者「啟用/停用」狀態切換功能 (含後端 API、權限控管、活動紀錄) - 強化安全性:隱藏超級管理員角色的可見度與操作權限 - 更新開發規範:加入多租戶資料同步規範於 framework.md - 前端優化:使用 Switch 元件進行狀態快速切換,調整表格欄位順序
This commit is contained in:
@@ -1,60 +0,0 @@
|
||||
# 開發框架規範說明書:ERP 系統 (star-erp)
|
||||
|
||||
## 1. 專案概述
|
||||
* **目標**: 打造一個強大且穩定的 ERP 後台管理系統。
|
||||
* **核心架構**: 採用 **模組化單體式架構 (Modular Monolith)** 配現代化前端。使用 Laravel、Inertia.js 及 React。
|
||||
* **工作流程**: 將 UI/UX 設計師提供的 React 原始碼,透過 Inertia.js 整合進 Laravel 環境中。後端邏輯依據「業務領域」拆分為獨立模組。
|
||||
|
||||
## 2. 技術棧 (Tech Stack)
|
||||
* **後端**: PHP 8.5 / Laravel 12
|
||||
* **前端橋樑**: Inertia.js (不使用傳統 RESTful API 串接頁面,改用 Inertia 協議)
|
||||
* **前端庫**: React (以 Functional Components 與 Hooks 為主)
|
||||
* **樣式處理**: Tailwind CSS (確保與 UI/UX 設計稿完全一致)
|
||||
* **資料庫**: MySQL 8.0
|
||||
* **開發環境**: Laravel Sail (Docker / WSL2)
|
||||
* **未來擴充**: 針對高併發或跨平台模組,預留 Golang 微服務接口。
|
||||
|
||||
## 3. 目錄結構與慣例
|
||||
|
||||
### 3.1 後端 (Laravel - Modular Monolith)
|
||||
系統採用模組化架構,核心邏輯位於 `app/Modules/` 下:
|
||||
|
||||
* **Modules**: 位於 `app/Modules/{ModuleName}/`。
|
||||
* **Controllers**: `app/Modules/{ModuleName}/Controllers/`。必須回傳 `Inertia::render()`。
|
||||
* **Models**: `app/Modules/{ModuleName}/Models/`。
|
||||
* **Routes**: `app/Modules/{ModuleName}/Routes/web.php`。各模組獨立管理路由。
|
||||
* **Global Routes**: `routes/web.php` 僅保留全域通用路由或作為模組路由的載入點。
|
||||
|
||||
### 3.2 前端 (React)
|
||||
* **Pages (頁面)**: 位於 `resources/js/Pages/`。每個檔案代表一個完整的路由視圖。
|
||||
* **Components (組件)**: 位於 `resources/js/Components/`。存放由 UI/UX 團隊提供的可重複使用 UI 元件。
|
||||
* **Layouts (版面)**: 位於 `resources/js/Layouts/`。定義 ERP 的通用版面。
|
||||
|
||||
## 4. 整合指南 (UI/UX 轉換至 Laravel)
|
||||
* **組件遷移**: 將 UI/UX 的 React 原始碼移入 `resources/js/` 時,應進行「原子化」拆解,提高元件複用率。
|
||||
* **資料傳遞**: 透過 Laravel Controller 的 props 傳送動態資料給 React。優先使用 Inertia 資料流,避免初次渲染時使用 axios。
|
||||
* **狀態管理**: 優先使用 Inertia 內建的狀態管理與 useForm hook 處理表單提交。
|
||||
|
||||
## 5. 開發標準 (Coding Standards)
|
||||
* **命名規範**:
|
||||
* Controllers: `PascalCaseController.php`
|
||||
* React Components: `PascalCase.jsx`
|
||||
* Routes: `kebab-case` (小寫橫線分隔)
|
||||
* **回傳格式**: 所有的前後端溝通需維持一致的 JSON 結構,特別是驗證錯誤 (Validation Errors) 與閃存訊息 (Flash Messages)。
|
||||
|
||||
## 6. AI 協作規則 (給 Antigravity AI)
|
||||
* **角色設定**: 你是一位專業的全端開發工程師助手。
|
||||
* **代碼生成指令**:
|
||||
* 所有的解釋說明請使用 **繁體中文**。
|
||||
* 生成 React 組件時,必須符合專案現有的 Tailwind CSS 配置。
|
||||
* 必須考慮 ERP 邏輯(例如:權限判斷、操作日誌、資料完整性)。
|
||||
* 新增功能時,請先判斷應歸屬於哪個 Module,並建立在 `app/Modules/` 對應目錄下。
|
||||
|
||||
## 7. 運行機制 (Docker / Sail)
|
||||
由於專案運行在 Docker 容器環境中,請勿直接在宿主機 (Host) 執行 php 或 composer 指令。請使用專案內建的 `sail` 指令:
|
||||
|
||||
* **啟動環境**: `./vendor/bin/sail up -d`
|
||||
* **執行 PHP 指令**: `./vendor/bin/sail php -v`
|
||||
* **執行 Artisan 指令**: `./vendor/bin/sail artisan route:list`
|
||||
* **執行 Composer**: `./vendor/bin/sail composer install`
|
||||
* **執行 Node/NPM**: `./vendor/bin/sail npm run dev`
|
||||
@@ -1,71 +0,0 @@
|
||||
# Multi-tenancy 部署手冊
|
||||
|
||||
> 記錄本地開發完成後,上 Demo/Production 環境時需要手動執行的操作。
|
||||
> CI/CD 會自動執行的項目已排除。
|
||||
|
||||
---
|
||||
|
||||
## Step 1: 安裝 stancl/tenancy
|
||||
**CI/CD 會自動執行**:`composer install`
|
||||
**手動操作**:無
|
||||
|
||||
---
|
||||
|
||||
## Step 2: 設定 Central Domain + Tenant 識別
|
||||
**手動操作**:
|
||||
1. 修改 `.env`,加入:
|
||||
```bash
|
||||
# Demo 環境 (192.168.0.103)
|
||||
CENTRAL_DOMAINS=192.168.0.103,localhost
|
||||
|
||||
# Production 環境 (erp.koori.tw)
|
||||
CENTRAL_DOMAINS=erp.koori.tw
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 3: 分離 Migrations
|
||||
**CI/CD 會自動執行**:`php artisan migrate --force`
|
||||
**手動操作**:無
|
||||
|
||||
> 注意:migrations 結構已調整如下:
|
||||
> - `database/migrations/` - Central tables (tenants, domains)
|
||||
> - `database/migrations/tenant/` - Tenant tables (所有業務表)
|
||||
|
||||
---
|
||||
|
||||
## Step 4: 遷移現有資料到 tenant_koori
|
||||
**首次部署手動操作**:
|
||||
1. 授予 MySQL sail 使用者 CREATE DATABASE 權限:
|
||||
```bash
|
||||
docker exec koori-erp-mysql mysql -uroot -p[PASSWORD] -e "GRANT ALL PRIVILEGES ON *.* TO 'sail'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;"
|
||||
```
|
||||
|
||||
2. 建立第一個租戶 (小小冰室):
|
||||
```bash
|
||||
docker exec -w /var/www/html koori-erp-laravel php artisan tinker --execute="
|
||||
use App\Models\Tenant;
|
||||
Tenant::create(['id' => 'koori', 'name' => '小小冰室']);
|
||||
"
|
||||
```
|
||||
|
||||
3. 為租戶綁定域名:
|
||||
```bash
|
||||
docker exec -w /var/www/html koori-erp-laravel php artisan tinker --execute="
|
||||
use App\Models\Tenant;
|
||||
Tenant::find('koori')->domains()->create(['domain' => 'koori.your-domain.com']);
|
||||
"
|
||||
```
|
||||
|
||||
4. 執行資料遷移 (從 central DB 複製到 tenant DB):
|
||||
```bash
|
||||
docker exec -w /var/www/html koori-erp-laravel php artisan tenancy:migrate-data koori
|
||||
```
|
||||
|
||||
## Step 5: 建立房東後台
|
||||
**手動操作**:無
|
||||
|
||||
---
|
||||
|
||||
## 其他注意事項
|
||||
- 待補充...
|
||||
Reference in New Issue
Block a user