更换数据库后Laravel Admin管理员重建及权限问题求助
解决Laravel-Admin更换数据库后生成管理员账号的问题
问题原因分析
- 手动创建用户提示Permission denied:仅创建
Administrator用户但未关联角色和权限,Laravel-Admin的权限系统依赖角色-权限关联,无权限的用户登录后会被拒绝。 admin:create-user命令报错:新数据库中roles表为空,命令需要选择角色但无选项,导致报错。
解决步骤
1. 初始化Laravel-Admin数据库表
新数据库需要先创建Laravel-Admin所需的所有表,运行迁移命令:
php artisan migrate
该命令会创建admin_users、roles、permissions、menu等权限相关表。
2. 填充权限系统初始数据
Laravel-Admin自带了填充超级管理员角色和默认权限的Seeder,运行以下命令填充:
php artisan db:seed --class=AdminTablesSeeder
执行后会自动创建超级管理员角色并赋予所有菜单权限。
3. 生成管理员账号(二选一)
方法一:使用官方命令创建
现在roles表已有数据,重新执行创建用户命令:
php artisan admin:create-user
按照提示输入用户名、密码、姓名,然后选择超级管理员角色即可。创建完成后登录后台就不会有Permission denied的问题。
方法二:通过Seeder创建
如果习惯用Seeder批量创建,新建AdminUserSeeder.php文件:
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Encore\Admin\Auth\Database\Administrator; use Encore\Admin\Auth\Database\Role; class AdminUserSeeder extends Seeder { public function run() { // 获取超级管理员角色 $superAdminRole = Role::where('slug', 'administrator')->first(); // 创建管理员并关联角色 Administrator::create([ 'username' => 'admin', 'password' => bcrypt('password'), 'name' => 'Administrator', ])->roles()->attach($superAdminRole); } }
然后运行Seeder:
php artisan db:seed --class=AdminUserSeeder
额外注意事项
- 之前的Seeder代码中模型命名空间错误:正确路径是
Encore\Admin\Auth\Database\Administrator,而非Encore\Admin\Auth\Database\Administrator\Administrator,需修正避免后续问题。 - 如果之前运行过迁移但表结构不一致,可以先重置数据库(
php artisan migrate:fresh)再重新执行上述步骤,但注意会清空所有数据。
内容的提问来源于stack exchange,提问作者mpg26262
相关产品推荐
相关产品推荐

