# 知识库系统项目概览 ## 项目简介 知识库系统是一个基于 Laravel 11 和 Filament 3.X 构建的企业级文档管理平台。系统支持 Word 文档上传、自动转换为 Markdown 格式、全文搜索、在线预览以及基于用户分组的细粒度权限控制。 ## 核心功能 ### 1. 文档管理 - **文档上传**:支持 .doc 和 .docx 格式的 Word 文档上传 - **文档分类**: - 全局知识库:所有用户可访问 - 专用知识库:仅特定分组用户可访问 - **文档下载**:支持原始 Word 文档下载,并记录下载日志 - **文档预览**:在线预览 Markdown 渲染后的文档内容 ### 2. 自动文档转换 - **异步转换**:使用队列系统异步将 Word 文档转换为 Markdown 格式 - **转换工具**:支持 Pandoc 或 PHPWord 作为转换引擎 - **状态跟踪**:实时跟踪转换状态(pending、processing、completed、failed) - **错误处理**:转换失败不影响文档的正常使用 ### 3. 全文搜索 - **搜索引擎**:集成 Meilisearch 提供快速的全文搜索 - **搜索范围**:支持搜索文档标题、描述和 Markdown 内容 - **权限过滤**:搜索结果自动过滤,只显示用户有权访问的文档 - **高级筛选**:支持按文档类型、分组等条件筛选 ### 4. 权限控制 - **用户分组**:用户可以属于多个分组 - **访问控制**: - 全局文档:所有用户可访问 - 专用文档:只有所属分组的用户可访问 - **权限验证**:在数据查询、下载、预览等操作中强制执行权限检查 - **安全日志**:记录所有未授权访问尝试 ### 5. 用户界面 - **中文界面**:完整的简体中文用户界面 - **管理面板**:基于 Filament 3.X 的现代化管理界面 - **响应式设计**:支持桌面和移动设备访问 ## 技术栈 ### 后端 - **框架**:Laravel 11.x - **管理面板**:Filament 3.X - **数据库**:MySQL 8.0+ / PostgreSQL 13+ - **搜索引擎**:Meilisearch 1.5+ - **队列系统**:Redis Queue - **文档转换**:Pandoc 2.x+ 或 PHPWord ### 前端 - **模板引擎**:Laravel Blade - **CSS 框架**:Tailwind CSS 3.x - **JavaScript**:Alpine.js 3.x(Filament 内置) ### 开发工具 - **包管理**:Composer 2.x, npm - **测试框架**: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/ # 原始 Word 文档存储 │ └── markdown/ # Markdown 文件存储 ├── tests/ # 测试文件 └── .kiro/ └── specs/ # 功能规格文档 ``` ## 数据模型 ### 核心实体 1. **User(用户)** - 系统用户 - 可属于多个分组 - 可上传文档 2. **Group(分组)** - 用户组织单位 - 拥有专用知识库文档 - 管理成员访问权限 3. **Document(文档)** - 文档记录 - 包含原始文件和 Markdown 内容 - 关联分组和上传者 4. **DownloadLog(下载日志)** - 记录文档下载历史 - 用于审计和统计 ### 关系图 ``` User ──┬── uploads ──> Document └── belongs_to ──> Group ──> owns ──> Document │ └── has ──> DownloadLog ``` ## 已实现功能清单 ### ✅ 核心功能 - [x] 用户认证和授权 - [x] 用户分组管理 - [x] 文档上传和存储 - [x] 文档分类(全局/专用) - [x] 基于分组的权限控制 - [x] 文档下载和日志记录 - [x] 文档搜索和筛选 ### ✅ 高级功能 - [x] Word 文档自动转换为 Markdown - [x] 异步队列处理转换任务 - [x] Meilisearch 全文搜索集成 - [x] 文档 Markdown 在线预览 - [x] 搜索结果权限过滤 - [x] 安全日志记录 ### ✅ 用户界面 - [x] Filament 管理面板 - [x] 完整中文界面 - [x] 文档管理界面 - [x] 分组管理界面 - [x] 用户管理界面 - [x] 搜索页面 - [x] 预览页面 ### ⏳ 待完成功能 - [ ] 属性基础测试(Property-Based Testing) - [ ] 完整的功能测试套件 - [ ] 性能优化(缓存、索引优化) - [ ] UI 增强(Alpine.js 动画和交互) - [ ] 部署文档和脚本 ## 快速开始 ### 环境要求 - PHP 8.1+ - Composer 2.x - Node.js 18+ - MySQL 8.0+ 或 PostgreSQL 13+ - Redis 6.0+ - Meilisearch 1.5+ - Pandoc 2.x+(可选) ### 安装步骤 1. **克隆项目** ```bash git clone cd knowledge-base-system ``` 2. **安装依赖** ```bash composer install npm install ``` 3. **配置环境** ```bash cp .env.example .env php artisan key:generate ``` 4. **配置数据库** 编辑 `.env` 文件,设置数据库连接信息 5. **运行迁移** ```bash php artisan migrate ``` 6. **生成测试数据**(可选) ```bash php artisan db:seed ``` 7. **启动服务** ```bash # 启动 Laravel 开发服务器 php artisan serve # 启动队列工作进程 php artisan queue:work # 启动 Meilisearch meilisearch --master-key="your-master-key" ``` 8. **访问系统** 打开浏览器访问 `http://localhost:8000/admin` ## 配置说明 ### 文档转换配置 在 `.env` 文件中配置: ```env DOCUMENT_CONVERSION_DRIVER=pandoc PANDOC_PATH=/usr/local/bin/pandoc CONVERSION_TIMEOUT=300 ``` ### Meilisearch 配置 ```env MEILISEARCH_HOST=http://127.0.0.1:7700 MEILISEARCH_KEY=your-master-key SCOUT_DRIVER=meilisearch ``` ### 队列配置 ```env QUEUE_CONNECTION=redis REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 ``` ## 测试 ### 运行测试 ```bash # 运行所有测试 php artisan test # 运行特定测试 php artisan test --filter=DocumentAccessScopePropertyTest # 生成测试覆盖率报告 php artisan test --coverage ``` ### 测试数据 使用 Factory 生成测试数据: ```php // 创建用户 $user = User::factory()->create(); // 创建分组 $group = Group::factory()->create(); // 创建文档 $document = Document::factory()->create([ 'type' => 'global', ]); ``` ## 部署 详细的部署指南请参考 [DEPLOYMENT.md](./DEPLOYMENT.md) ## 贡献指南 请参考 [CONTRIBUTING.md](./CONTRIBUTING.md) ## 许可证 本项目采用 MIT 许可证 ## 联系方式 如有问题或建议,请联系项目维护者。 --- **最后更新**:2025-12-05 **版本**:1.0.0