thinkphp6无内置“多应用授权隔离”功能,需通过物理结构隔离、独立配置、中间件与逻辑层控制实现:一、启用多应用基础;二、各应用独立管理登录与会话;三、权限数据与校验逻辑分应用部署;四、禁止跨应用直接调用或绕过校验。

ThinkPHP6本身不提供“多应用授权隔离”这个内置功能,它没有跨应用的统一权限中心或自动授权流转机制。所谓“授权隔离”,实际是通过物理结构隔离 + 配置独立 + 中间件/逻辑层控制来实现的——每个应用只管自己的登录态、角色权限和资源访问规则,彼此不共享 session、不共用权限表、也不自动传递 token 或用户身份。
一、确保多应用基础已正确启用
授权隔离的前提是多应用模式真正跑起来,否则所有请求都落在默认应用里,谈不上“隔离”:
- 已执行
composer require topthink/think-multi-app并确认自动注册了ThinkMultiAppServiceProvider - 入口文件
public/index.php中,在加载 autoload 前定义了define('APP_MULTI_MODULE', true) -
app/下有规范小写子目录(如admin、api),每个目录含controller/、config/、空route.php和config.php -
config/app.php中设置了'app_multi' => true(注意不是app_multi_module)和'auto_multi_app' => true
二、各应用独立管理登录与会话
TP6多应用默认不共享 session,但需主动避免意外共用:
- 在每个应用的
config/session.php中显式设置'name' => 'PHPSESSID_admin'(admin应用)、'name' => 'PHPSESSID_api'(api应用),防止浏览器 cookie 冲突 - 不要在根目录
config/session.php中配置,必须放在app/admin/config/session.php等子应用配置下 - 若使用 Redis 存储 session,可为每个应用指定不同
prefix,例如'prefix' => 'tp6:admin:session:'
三、权限数据与校验逻辑分应用部署
授权不是“配置一下就隔离”,而是靠数据表、模型和中间件分别落地:
- 数据库层面:admin 应用用
admin_users、admin_roles表;api 应用用api_tokens、api_scopes表,完全不复用同一套权限表 - 模型层面:每个应用的模型(如
app/admin/model/User.php)只操作本应用的数据表,$table属性明确指定 - 中间件层面:为 admin 应用写
app/admin/middleware/AuthMiddleware.php,为 api 应用写app/api/middleware/JwtAuthMiddleware.php,二者互不影响 - 路由层面:在
app/admin/route/app.php中用->middleware(AuthMiddleware::class),在app/api/route/app.php中用->middleware(JwtAuthMiddleware::class)
四、禁止跨应用直接调用或绕过校验
框架不会自动阻止你从 admin 控制器里 new 一个 api 的模型,但这样会破坏隔离原则:
- 不要在
app/admin/controller中use app\api\model\ApiUser——命名空间虽能加载,但违背边界 - 需要共享用户信息?走 API 调用(如
http://api.your.com/v1/user/profile),而不是直接查库或实例化 - 如确需内部通信,建议封装为 service 类(如
app/common/service/UserSyncService.php),通过配置开关控制是否启用跨应用同步逻辑
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











