简介这是一套基于 layui2.5.6 前端组件库与 ThinkPHP6.0.2 后端框架搭建的权限管理后台源码面向需要快速构建企业级管理系统的 PHP 开发者也适合初学者理解前后端协同开发流程。资源包共 1098 个文件约 6.1MB以 481 个 php 业务与框架代码、139 个 js 脚本、36 个 html 页面、30 个 css 样式为主另含图片、字体、配置与依赖锁文件覆盖前端界面、后端逻辑与工程配置各环节。项目内置 RBAC 权限控制模型可方便地实现用户角色分配与权限校验并通过 .env 管理数据库等环境配置借助 composer.json 与 composer.lock 统一依赖版本目录结构清晰、便于二次开发。目前已有 2283 人学习下载读者可从中掌握权限后台的搭建思路、ThinkPHP6 的服务容器与事件机制用法以及 layui 组件化布局的实践方式适合作为学习模板或项目起点。1. 从零搭一套 layui2.5.6 tp6.0.2 权限管理后台版本选错后面全是坑这套组合在中小型后台项目里太常见了前端用 layui2.5.6 做界面后端用 ThinkPHP6.0.2 提供接口和权限控制。看着简单但真动手装的时候PHP 版本、Composer 依赖、layui 目录结构、数据库权限表设计任何一环对不上页面就是白屏或者 500。我见过不少人卡在composer install报错或者 layui 的layui.js路径 404折腾一整天。这篇笔记按真实部署顺序走一遍先列环境再装框架再配权限最后验证登录和菜单加载。适合刚接触 tp6 的开发者也适合从 tp5 迁过来的老手——版本差异和目录结构变化我会在对应步骤里标出来。2. 环境准备PHP 版本、Composer 与 layui2.5.6 的目录约定2.1 PHP 与扩展tp6.0.2 的硬性门槛ThinkPHP6.0.2 要求 PHP 7.2.5但实际跑权限管理后台我建议直接上 PHP 7.4 或 8.0。PHP 8.0 下 tp6.0.2 基本兼容但要注意think-migration等扩展的版本。必须开的扩展mbstring、openssl、pdo_mysql、curl、fileinfo。缺fileinfo会导致上传类报错缺mbstring则验证码和字符串处理直接崩。检查命令php -v php -m | grep -E mbstring|openssl|pdo_mysql|curl|fileinfo如果用的是集成环境phpstudy、宝塔直接在面板里勾选扩展。Linux 下用 apt 安装sudo apt install php7.4-mbstring php7.4-curl php7.4-mysql php7.4-xml php7.4-fileinfo提示PHP 8.1 下 tp6.0.2 的think-orm可能报Return type of ... should either be compatible警告生产环境建议锁 7.4 或 8.0。2.2 Composer 安装与国内镜像tp6 依赖 Composer 管理没装 Composer 后面寸步难行。Linux/macOScurl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer composer -VWindows 直接下 Composer-Setup.exe。装完换国内镜像否则拉包慢到怀疑人生composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/参数说明-g是全局配置对所有项目生效如果只想当前项目用去掉-g并在项目根目录执行。2.3 layui2.5.6 的获取与目录规划layui2.5.6 是最后一个 2.x 稳定版官方已不更新但胜在文档全、组件稳。下载后解压目录结构如下layui/ ├── css/ │ └── layui.css ├── layui.js ├── font/ └── modules/在 tp6 项目里我一般把 layui 放到public/static/layui/下这样模板里引用/static/layui/layui.js就能直接访问。不要放到application或view目录否则 URL 访问不到。cd /path/to/tp6-project/public mkdir -p static # 将解压后的 layui 文件夹整体移入 static mv ~/Downloads/layui static/ ls static/layui/layui.js确认layui.js存在即可。如果后面页面报layui is not defined九成是路径写错或没放到 public 下。3. 安装 tp6.0.2 与权限模块Composer 拉包与数据库初始化3.1 创建项目并锁定版本不要用composer create-project topthink/think直接拉最新版那样会装成 tp6.1 或 tp8。必须指定版本composer create-project topthink/think6.0.2 tp-admin cd tp-admin如果已经装了其他版本改composer.json里的topthink/framework为6.0.2然后composer update topthink/framework --with-dependencies参数说明--with-dependencies会一并更新依赖树避免版本冲突。更新完用php think version确认输出6.0.2。3.2 安装权限管理常用扩展权限后台离不开几个包topthink/think-migration数据库迁移、topthink/think-captcha验证码、firebase/php-jwt接口鉴权。我一般还会装topthink/think-multi-app做多应用模式。composer require topthink/think-migration:^3.0 composer require topthink/think-captcha:^3.0 composer require firebase/php-jwt:^6.0 composer require topthink/think-multi-app:^1.0注意tp6.0.2 对应 think-migration 3.x装 4.x 会报Class not found。captcha 3.x 才支持 tp6。3.3 数据库配置与权限表设计复制.example.env为.env改数据库连接APP_DEBUG true [DATABASE] TYPE mysql HOSTNAME 127.0.0.1 DATABASE tp_admin USERNAME root PASSWORD your_password HOSTPORT 3306 CHARSET utf8mb4 DEBUG true权限管理最少需要五张表admin管理员、role角色、menu菜单/权限节点、role_menu角色-菜单关联、admin_role管理员-角色关联。用 migration 创建php think migrate:create CreateAdminTable生成的迁移文件在database/migrations/下编辑public function change() { $this-table(admin, [engine InnoDB, comment 管理员表]) -addColumn(username, string, [limit 50, comment 用户名]) -addColumn(password, string, [limit 255, comment 密码]) -addColumn(role_id, integer, [default 0, comment 角色ID]) -addColumn(create_time, integer, [default 0]) -create(); }执行迁移php think migrate:run参数说明migrate:run会按时间戳顺序执行所有未执行的迁移。如果表已存在会报错用php think migrate:rollback回滚后再跑。3.4 多应用模式与后台入口tp6.0.2 默认单应用权限后台建议开多应用把后台独立成admin应用php think multi:app admin这会在app/下生成admin目录。然后配置路由让/admin指向后台入口。在route/app.php里加Route::group(admin, function () { Route::rule(login, admin/Login/index); Route::rule(index, admin/Index/index); });访问http://你的域名/admin/login就能看到后台登录页。如果 404检查public/index.php是否正常以及伪静态规则是否配好Nginx 用try_filesApache 用.htaccess。4. 避坑与排查layui 加载失败、tp6 报错、权限不生效4.1 layui.js 404 或 layui is not defined现象页面样式全丢控制台报layui.js 404或layui is not defined。 原因layui 没放在public目录下或者模板里路径写成了相对路径。 解决确认public/static/layui/layui.js存在模板里用绝对路径script src/static/layui/layui.js/script不要写../static/layui.jstp6 的模板解析后路径会变。4.2 composer install 报 memory_limit 错误现象composer install中途提示Allowed memory size exhausted。 原因Composer 拉包时内存占用大PHP CLI 默认 128M 不够。 解决临时提高内存限制php -d memory_limit-1 /usr/local/bin/composer install或者改php.ini里memory_limit 512M。我一般直接-1不限制装完再改回来。4.3 权限菜单不显示或 403现象登录后菜单空白或者点菜单提示无权限。 原因role_menu表没数据或者中间件里权限判断逻辑写反了。 解决先手动往role_menu插一条超管全权限记录确认菜单能出来。然后检查中间件// app/admin/middleware/Auth.php public function handle($request, \Closure $next) { $admin session(admin); if (!$admin) { return redirect(/admin/login); } // 超管跳过权限检查 if ($admin[role_id] 1) { return $next($request); } // 普通角色查 role_menu $has Db::name(role_menu) -where(role_id, $admin[role_id]) -where(menu_id, $request-menuId) -find(); if (!$has) { return json([code 403, msg 无权限]); } return $next($request); }注意$request-menuId需要你在路由或控制器里提前赋值否则永远是 null。4.4 验证码不显示或 session 丢失现象登录页验证码图片裂开或者输入正确却提示验证码错误。 原因captcha 扩展没装对版本或者 session 没开。 解决确认composer require topthink/think-captcha:^3.0装的是 3.x。然后在app/middleware.php里开启 sessionreturn [ \think\middleware\SessionInit::class, ];验证码校验用captcha_check($code)不要自己写 session 对比。4.5 迁移文件执行顺序错乱现象php think migrate:run报外键约束失败。 原因role_menu表依赖role和menu表但迁移时间戳顺序不对。 解决手动改迁移文件名的时间戳让被依赖的表先执行。比如20240101_create_role_table.php要早于20240102_create_role_menu_table.php。或者干脆不用外键在应用层保证数据一致性。5. 装完怎么验证登录、菜单、权限一条龙检查装完别急着写业务先跑一遍最小验证流程。我一般按这个顺序查第一步访问登录页。浏览器打开http://你的域名/admin/login看 layui 样式是否正常加载。如果页面裸奔回去查 4.1。验证码能显示且刷新有效说明 captcha 和 session 都通了。第二步用超管登录。数据库admin表里插一条role_id1的记录密码用password_hash(123456, PASSWORD_DEFAULT)生成。登录后看是否跳转到/admin/index。如果提示验证码错误检查 session 中间件。第三步检查菜单树。超管应该能看到所有菜单。在menu表里插几条测试数据role_menu里给role_id1全量关联。刷新页面左侧菜单应该完整渲染。如果菜单不显示打开浏览器 Network 面板看菜单接口返回的 JSON 是否为空。第四步模拟普通角色。新建一个role_id2的管理员只关联一个菜单。登录后应该只看到那一个菜单访问其他 URL 返回 403。这一步能验证权限中间件是否真正生效。第五步接口鉴权测试。如果用 JWT用 Postman 请求/admin/api/user不带 token 应返回 401带正确 token 返回数据。JWT 密钥在.env里配JWT_SECRET不要硬编码在代码里。验证通过后建议把APP_DEBUG设为false避免报错页泄露路径。另外layui2.5.6 的表格和表单组件在 tp6 分页数据下需要手动适配code: 0, msg: , count: total, data: list格式这个在写第一个列表页时就会遇到。从那以后我每次搭这套环境都会先跑一遍这五步验证确认登录、菜单、权限、接口全通再动业务代码。希望帮到你。本文还有配套的精品资源点击获取