BaaS Tenant 模块
租户管理模块 - 实现多租户架构和数据隔离。
📦 模块信息
- 依赖: Drupal Core
- 位置:
web/modules/custom/baas_tenant/
🏗️ 架构设计
核心概念
租户(Tenant)是多租户架构的基础:
- 每个租户拥有独立的数据空间
- 租户之间完全隔离
- 支持租户级别的配置和限制
数据库表
baas_tenant_config
CREATE TABLE baas_tenant_config (
id SERIAL PRIMARY KEY,
tenant_id VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
owner_uid INTEGER NOT NULL,
status INTEGER DEFAULT 1,
settings TEXT,
created INTEGER NOT NULL,
updated INTEGER NOT NULL
);🔧 主要类和方法
TenantManager
租户管理服务 - src/Service/TenantManager.php
主要方法:
// 创建租户
public function createTenant(array $tenant_data): array
// 获取租户
public function getTenant(string $tenant_id): ?array
// 更新租户
public function updateTenant(string $tenant_id, array $updates): bool
// 删除租户
public function deleteTenant(string $tenant_id): bool
// 获取用户的所有租户
public function getUserTenants(int $user_id): arrayTenantService
租户业务逻辑 - src/Service/TenantService.php
// 验证租户访问权限
public function validateTenantAccess(int $user_id, string $tenant_id): bool
// 获取租户统计
public function getTenantStats(string $tenant_id): array
// 获取租户配置
public function getTenantSettings(string $tenant_id): arrayTenantController
租户 API 控制器 - src/Controller/TenantController.php
API 端点:
// GET /api/tenant/{tenant_id}
public function getTenant(string $tenant_id): JsonResponse
// POST /api/tenant
public function createTenant(Request $request): JsonResponse
// PUT /api/tenant/{tenant_id}
public function updateTenant(string $tenant_id, Request $request): JsonResponse
// DELETE /api/tenant/{tenant_id}
public function deleteTenant(string $tenant_id): JsonResponse📖 使用示例
创建租户
$tenant_manager = \Drupal::service('baas_tenant.manager');
$tenant = $tenant_manager->createTenant([
'tenant_id' => 'tenant_' . bin2hex(random_bytes(4)),
'name' => '示例租户',
'description' => '这是一个示例租户',
'owner_uid' => 1,
'status' => 1,
]);检查访问权限
$tenant_service = \Drupal::service('baas_tenant.service');
if ($tenant_service->validateTenantAccess($user_id, $tenant_id)) {
// 用户有权访问此租户
}🔌 服务注册
baas_tenant.services.yml:
services:
baas_tenant.manager:
class: Drupal\baas_tenant\Service\TenantManager
arguments:
- '@database'
- '@event_dispatcher'
baas_tenant.service:
class: Drupal\baas_tenant\Service\TenantService
arguments:
- '@database'
- '@baas_tenant.manager'📋 配置选项
暂无配置界面,通过代码配置。
🔗 相关文档
Last updated on