Skip to Content
🚀 Drubase One v1.1 - 基于 Drupal 11 的多租户后端即服务平台
Docs模块BaaS Auth

BaaS Auth 模块

认证授权模块 - JWT Token 管理和统一权限检查。

📦 模块信息

  • 依赖: Drupal Core
  • 位置: web/modules/custom/baas_auth/

🏗️ 核心功能

JWT 认证

  • Token 生成和验证
  • Token 刷新机制
  • 自动过期管理

统一权限

  • 项目级权限检查
  • 租户级权限检查
  • 角色权限管理

🔧 主要类和方法

JwtAuthService

JWT 认证服务 - src/Service/JwtAuthService.php

// 生成 JWT Token public function generateToken(int $user_id, array $claims = []): string // 验证 Token public function validateToken(string $token): array|false // 刷新 Token public function refreshToken(string $refresh_token): string // 解析 Token public function parseToken(string $token): array

UnifiedPermissionChecker

统一权限检查 - src/Service/UnifiedPermissionChecker.php

// 检查项目访问权限 public function canAccessProject(int $user_id, string $project_id): bool // 检查项目编辑权限 public function canEditProject(int $user_id, string $project_id): bool // 检查租户访问权限 public function canAccessTenant(int $user_id, string $tenant_id): bool // 获取用户角色 public function getUserProjectRole(int $user_id, string $project_id): ?string

AuthApiController

认证 API 控制器 - src/Controller/AuthApiController.php

// POST /api/auth/login public function login(Request $request): JsonResponse // POST /api/auth/refresh public function refresh(Request $request): JsonResponse // GET /api/auth/me public function me(Request $request): JsonResponse

📖 使用示例

生成 JWT Token

$jwt_service = \Drupal::service('baas_auth.jwt'); $token = $jwt_service->generateToken($user_id, [ 'tenant_id' => 'tenant_7375b0cd', 'project_id' => 'tenant_7375b0cd_project_6888d012be80c', ]);

权限检查

$permission_checker = \Drupal::service('baas_auth.unified_permission_checker'); if ($permission_checker->canEditProject($user_id, $project_id)) { // 用户有编辑权限 }

🔌 服务注册

baas_auth.services.yml:

services: baas_auth.jwt: class: Drupal\baas_auth\Service\JwtAuthService arguments: - '@config.factory' - '@datetime.time' baas_auth.unified_permission_checker: class: Drupal\baas_auth\Service\UnifiedPermissionChecker arguments: - '@database' - '@entity_type.manager'

🔗 相关文档

Last updated on