Skip to content

基础

本文档将详细介绍 CatchAdmin 多租户系统的基础功能和使用方法,帮助您更好地理解和应用多租户架构。

日志系统

在多租户环境中,日志管理是一个重要的环节。为了清晰区分总后台(中央管理系统)和各个租户后台的运行情况,租户扩展模块对日志存储进行了合理的分割处理。

日志存储结构

  • 总后台日志storage/logs 目录存储中央系统的所有运行日志,包括系统级别的操作记录、错误信息等。

  • 租户日志storage/logs/tenant-{uuid} 目录专门存储对应租户的运行日志,确保租户数据的隔离性。

其中 {uuid} 是系统分配给每个租户的唯一标识符,确保了日志的唯一性和可追溯性。这种结构设计使管理员能够轻松区分和查找特定租户的日志信息。

文件上传系统

多租户环境下,文件存储同样需要进行隔离管理。CatchAdmin 专业版提供了完善的文件上传和存储机制,确保不同租户的文件互不干扰。

上传磁盘类型

目前专业版本地上传系统配置了三个独立的上传磁盘,各自承担不同的存储职责:

  • uploads: 主要用于上传业务相关的文件和图片,如用户头像、产品图片等。
  • static: 专门用于存储静态资源文件,如 CSS、JavaScript、字体文件等。
  • certs: 用于安全存储证书相关文件,如 SSL 证书、API 密钥等敏感资料。

存储目录结构

文件存储的目录结构设计与日志系统类似,采用了清晰的层级划分:

  • 总后台文件storage/uploads 目录存储中央系统的所有上传文件。
  • 租户文件storage/uploads/tenant-{uuid} 目录存储特定租户的上传文件。

这种结构设计不仅保证了数据隔离,还便于系统进行文件管理和维护。同样的结构也适用于 staticcerts 磁盘。

命令系统

在多租户架构中,命令执行是一个需要特别关注的环节。默认情况下,Artisan 命令只会在主后台(中央系统)中执行,这对于系统级别的操作是合适的。

多租户命令执行

然而,在某些场景下,您可能需要让命令在所有租户环境中执行,例如:

  • 数据同步任务
  • 定时清理作业
  • 批量数据处理
  • 系统通知发送

这时,您需要创建一个继承自 TenancyCommand 的命令类,系统将自动处理多租户环境下的命令执行逻辑。

示例代码

以下是创建一个多租户命令的示例:

php
use CatchTenant\Commands\TenancyCommand;

class TestCommand extends TenancyCommand
{
    /**
     * 命令签名
     * 
     * @var string
     */
    protected $signature = 'test';

    /**
     * 命令描述
     * 
     * @var string
     */
    protected $description = '测试命令 - 在所有租户环境中执行';

    /**
     * 命令处理逻辑
     * 
     * @return void
     */
    public function handle(): void
    {
        // 此处的代码将在每个租户环境中分别执行
        // 可以通过 $this->tenant 获取当前租户信息
        
        $this->info('正在租户 [' . $this->tenant->id . '] 环境中执行命令');
        
        // 执行租户特定的业务逻辑
        // ...
    }
}

注册与调用

创建命令后,需要在 app/Console/Kernel.php 中注册该命令,然后可以通过以下方式调用:

bash
php artisan test

系统将自动遍历所有租户并在每个租户的环境中执行该命令。