# 知识库系统

基于 Laravel 11 和 Filament 3.X 构建的企业级文档管理平台，支持 Word 文档上传、自动转换为 Markdown、全文搜索和基于分组的权限控制。

[![Laravel](https://img.shields.io/badge/Laravel-11.x-red.svg)](https://laravel.com)
[![Filament](https://img.shields.io/badge/Filament-3.x-orange.svg)](https://filamentphp.com)
[![PHP](https://img.shields.io/badge/PHP-8.1+-blue.svg)](https://php.net)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)

## ✨ 功能特性

### 📄 文档管理
- **多格式支持**：支持 .doc 和 .docx 格式的 Word 文档上传
- **智能分类**：
  - 全局知识库：所有用户可访问
  - 专用知识库：仅特定分组用户可访问
- **安全下载**：支持原始文档下载，自动记录下载日志
- **在线预览**：Markdown 格式在线预览，无需下载

### 🔄 自动转换
- **异步处理**：使用 Laravel Queue 异步转换文档
- **多引擎支持**：支持 Pandoc 或 PHPWord 作为转换引擎
- **状态跟踪**：实时显示转换状态（待处理、处理中、已完成、失败）
- **容错机制**：转换失败不影响文档正常使用

### 🔍 全文搜索
- **快速搜索**：集成 Meilisearch 提供毫秒级搜索响应
- **多字段搜索**：同时搜索标题、描述和文档内容
- **智能过滤**：搜索结果自动应用权限过滤
- **高级筛选**：支持按类型、分组、上传者等条件筛选

### 🔐 权限控制
- **灵活分组**：用户可以属于多个分组
- **细粒度控制**：
  - 全局文档：所有用户可访问
  - 专用文档：只有所属分组用户可访问
- **多层验证**：在查询、下载、预览等操作中强制执行权限
- **安全审计**：记录所有未授权访问尝试

### 🎨 用户界面
- **现代化设计**：基于 Filament 3.X 的美观管理界面
- **完整中文化**：所有界面元素使用简体中文
- **响应式布局**：完美支持桌面和移动设备
- **直观操作**：简洁的操作流程，降低学习成本

## 🚀 快速开始

### 环境要求

- PHP 8.1 或更高版本
- Composer 2.x
- Node.js 18+ 和 npm
- MySQL 8.0+ 或 PostgreSQL 13+
- Redis 6.0+
- Meilisearch 1.5+
- Pandoc 2.x+（可选，用于文档转换）

### 安装步骤

1. **克隆项目**
```bash
git clone <repository-url>
cd knowledge-base-system
```

2. **安装依赖**
```bash
composer install
npm install
```

3. **配置环境**
```bash
cp .env.example .env
php artisan key:generate
```

编辑 `.env` 文件，配置数据库连接：
```env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=knowledge_base
DB_USERNAME=your_username
DB_PASSWORD=your_password
```

4. **运行迁移**
```bash
php artisan migrate
```

5. **生成测试数据**（可选）
```bash
php artisan db:seed
```

6. **创建管理员账户**
```bash
php artisan make:filament-user
```

7. **编译前端资源**
```bash
npm run build
```

8. **启动服务**

在不同的终端窗口中运行：

```bash
# Laravel 开发服务器
php artisan serve

# 队列工作进程
php artisan queue:work

# Meilisearch（如果本地安装）
meilisearch --master-key="your-master-key"
```

9. **访问系统**

打开浏览器访问：`http://localhost:8000/admin`

## 📚 文档

- [项目概览](docs/PROJECT_OVERVIEW.md) - 系统架构和功能详解
- [部署指南](docs/DEPLOYMENT.md) - 生产环境部署步骤
- [API 参考](docs/API_REFERENCE.md) - 服务类和方法文档
- [Meilisearch 配置](docs/MEILISEARCH_SETUP.md) - 搜索引擎配置说明
- [文档转换指南](docs/DOCUMENT_CONVERSION_GUIDE.md) - 转换功能配置
- [安全日志](docs/security-logging.md) - 安全审计功能说明

## 🔧 配置

### Meilisearch 配置

在 `.env` 文件中配置：

```env
MEILISEARCH_HOST=http://127.0.0.1:7700
MEILISEARCH_KEY=your-master-key
SCOUT_DRIVER=meilisearch
```

### 文档转换配置

```env
DOCUMENT_CONVERSION_DRIVER=pandoc
PANDOC_PATH=/usr/local/bin/pandoc
CONVERSION_TIMEOUT=300
```

### 队列配置

```env
QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
```

详细配置说明请参考 [部署指南](docs/DEPLOYMENT.md)。

## 🧪 测试

### 运行测试

```bash
# 运行所有测试
php artisan test

# 运行特定测试
php artisan test --filter=DocumentAccessScopePropertyTest

# 生成测试覆盖率报告
php artisan test --coverage
```

### 测试类型

- **单元测试**：测试独立的类和方法
- **功能测试**：测试完整的用户流程
- **属性测试**：使用 Property-Based Testing 验证核心逻辑

## 📦 技术栈

### 后端
- **Laravel 11.x** - PHP Web 应用框架
- **Filament 3.X** - 管理面板框架
- **Laravel Scout** - 全文搜索集成
- **Meilisearch** - 快速搜索引擎
- **Pandoc** - 文档格式转换工具

### 前端
- **Blade** - Laravel 模板引擎
- **Tailwind CSS** - CSS 框架
- **Alpine.js** - JavaScript 框架（Filament 内置）
- **Livewire** - 全栈框架（Filament 内置）

### 数据库
- **MySQL 8.0+** 或 **PostgreSQL 13+**
- **Redis** - 缓存和队列

### 开发工具
- **Pest PHP** - 测试框架
- **PHPStan** - 静态分析工具
- **Laravel Pint** - 代码格式化工具

## 🗂️ 项目结构

```
knowledge-base-system/
├── app/
│   ├── Filament/              # Filament 资源和页面
│   │   ├── Pages/             # 自定义页面（搜索）
│   │   └── Resources/         # 资源管理（文档、分组、用户）
│   ├── Http/
│   │   └── Controllers/       # 控制器（文档预览）
│   ├── Jobs/                  # 队列任务（文档转换）
│   ├── Models/                # Eloquent 模型
│   ├── Observers/             # 模型观察者（文档索引）
│   ├── Policies/              # 授权策略
│   └── Services/              # 业务逻辑服务
├── config/
│   ├── documents.php          # 文档转换配置
│   ├── filesystems.php        # 文件存储配置
│   └── scout.php              # Meilisearch 配置
├── database/
│   ├── factories/             # 测试数据工厂
│   ├── migrations/            # 数据库迁移
│   └── seeders/               # 数据填充
├── docs/                      # 项目文档
├── resources/
│   └── views/                 # Blade 视图模板
├── storage/
│   └── app/
│       └── private/
│           ├── documents/     # 原始文档存储
│           └── markdown/      # Markdown 文件存储
├── tests/                     # 测试文件
└── .kiro/
    └── specs/                 # 功能规格文档
```

## 🤝 贡献

欢迎贡献代码！请遵循以下步骤：

1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request

## 📝 更新日志

### v1.0.0 (2025-12-05)

#### 已实现功能
- ✅ 用户认证和授权
- ✅ 用户分组管理
- ✅ 文档上传和存储
- ✅ 文档分类（全局/专用）
- ✅ 基于分组的权限控制
- ✅ 文档下载和日志记录
- ✅ Word 文档自动转换为 Markdown
- ✅ 异步队列处理转换任务
- ✅ Meilisearch 全文搜索集成
- ✅ 文档 Markdown 在线预览
- ✅ 搜索结果权限过滤
- ✅ 安全日志记录
- ✅ Filament 管理面板
- ✅ 完整中文界面

#### 待完成功能
- ⏳ 属性基础测试（Property-Based Testing）
- ⏳ 完整的功能测试套件
- ⏳ 性能优化（缓存、索引优化）
- ⏳ UI 增强（Alpine.js 动画和交互）

## 🔒 安全

如果发现安全漏洞，请发送邮件至 security@example.com，我们会及时处理。

请勿在公开的 issue 中报告安全问题。

## 📄 许可证

本项目采用 MIT 许可证。详情请参阅 [LICENSE](LICENSE) 文件。

## 🙏 致谢

感谢以下开源项目：

- [Laravel](https://laravel.com) - 优雅的 PHP 框架
- [Filament](https://filamentphp.com) - 强大的管理面板
- [Meilisearch](https://www.meilisearch.com) - 快速搜索引擎
- [Pandoc](https://pandoc.org) - 通用文档转换器
- [Tailwind CSS](https://tailwindcss.com) - 实用优先的 CSS 框架

## 📞 联系方式

- **问题反馈**: 请在 GitHub Issues 中提交
- **功能建议**: 欢迎在 GitHub Discussions 中讨论

---

**开发状态**: 🚧 活跃开发中

**最后更新**: 2025-12-05

**版本**: 1.0.0
