lcly-data-admin/database/seeders/AdminMenuSeeder.php

85 lines
2.9 KiB
PHP

<?php
namespace Database\Seeders;
use Dcat\Admin\Models\Menu;
use Dcat\Admin\Models\Permission;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Throwable;
class AdminMenuSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
$menus = [
['title' => '主页', 'icon' => 'feather icon-bar-chart-2', 'uri' => '/'],
['title' => '系统管理', 'icon' => 'feather icon-settings', 'uri' => '',
'permission' => ['administrators', 'roles', 'keywords', 'settings'],
'children' => [
['title' => '用户管理', 'icon' => '', 'uri' => '/auth/users', 'permission' => 'administrators'],
['title' => '角色管理', 'icon' => '', 'uri' => '/auth/roles', 'permission' => 'roles'],
['title' => '字典管理', 'icon' => '', 'uri' => '/keywords', 'permission' => 'keywords'],
['title' => '配置管理', 'icon' => '', 'uri' => '/settings', 'permission' => 'settings'],
], ],
];
DB::table('admin_menu')->truncate();
DB::table('admin_permission_menu')->truncate();
try {
DB::begintransaction();
$this->createMenus($menus);
DB::commit();
} catch (Throwable $th) {
DB::rollBack();
report($th);
}
}
public function createMenus(array $menus, $pid = 0)
{
$prefix = 'dcat.admin.';
foreach ($menus as $menu) {
$mm = Menu::create([
'title' => $menu['title'],
'icon' => $menu['icon'],
'uri' => $menu['uri'],
'parent_id' => $pid,
]);
if (isset($menu['permission'])) {
if (! is_array($menu['permission'])) {
$permissions = [$menu['permission']];
} else {
$permissions = $menu['permission'];
}
foreach ($permissions as $item) {
if (Str::contains($item, '.')) {
$permission = Permission::where('slug', $prefix.$item)->first();
} else {
$permission = Permission::where('slug', $prefix.$item.'.index')->first();
}
if ($permission) {
DB::table('admin_permission_menu')->insert([
'permission_id' => $permission->id,
'menu_id' => $mm->id,
'created_at' => now(),
'updated_at' => now(),
]);
}
}
}
if (isset($menu['children'])) {
$this->createMenus($menu['children'], $mm->id);
}
}
}
}