truncate(); DB::table('admin_permissions')->truncate(); DB::table('admin_permission_menu')->truncate(); DB::table('admin_role_permissions')->truncate(); // icon: https://icones.js.org/collection/mdi $list = [ ['name' => '首页', 'icon' => 'mdi:home', 'slug' => 'dashboard', 'url' => '/dashboard', 'is_home' => 1], ['name' => '系统管理', 'icon' => 'mdi:cog-outline', 'slug' => 'system', 'url' => '/system', 'children' => [ ['name' => '管理员', 'icon' => 'mdi:account-cog-outline', 'slug' => 'admin_users', 'url' => '/system/admin_users'], ['name' => '角色', 'icon' => 'mdi:account-box-outline', 'slug' => 'roles', 'url' => '/system/admin_roles'], ['name' => '权限', 'icon' => 'mdi:key-variant', 'slug' => 'permissions', 'url' => '/system/admin_permissions'], ['name' => '菜单', 'icon' => 'mdi:menu-open', 'slug' => 'menus', 'url' => '/system/admin_menus'], ['name' => '设置', 'icon' => 'mdi:application-cog-outline', 'slug' => 'settings', 'url' => '/system/settings'], ['name' => '字典管理', 'icon' => 'mdi:folder-key-network', 'slug' => 'keywords', 'url' => '/system/keywords', 'resource' => true, 'permissions' => ['export' => '导出']], ]], ]; $this->createByTree($list); } protected function createByTree($list, $parent = null) { foreach($list as $item) { $parent_permission_id = data_get($parent, 'permission', 0); $parent_menu_id = data_get($parent, 'menu', 0); $menu = $this->createMenu($item, $parent_menu_id); $permission = $this->createPermission($item, $parent_permission_id, $menu); if (isset($item['children'])) { $this->createByTree($item['children'], ['permission' => $permission->id, 'menu' => $menu->id]); } $resource_permissions = $this->getResourcePermissions(data_get($item, 'resource')); if (isset($item['permissions'])) { $resource_permissions = array_merge($resource_permissions, $item['permissions']); } foreach($resource_permissions as $key => $name) { $this->createPermission([ 'name' => $name, 'slug' => $item['slug'].'.'.$key, ], $permission->id, $menu); } } } protected function createMenu($item, $pid = 0) { return AdminMenu::create([ 'parent_id' => $pid, 'custom_order' => data_get($item, 'custom_order', 0), 'title' => data_get($item, 'name'), 'icon' => data_get($item, 'icon'), 'url' => data_get($item, 'url'), 'is_home' => data_get($item, 'is_home', 0), ]); } protected function createPermission($item, $pid = 0, $menu = null) { $slug = data_get($item, 'slug'); $url = data_get($item, 'url'); $method = data_get($item, 'method'); $permission = AdminPermission::create([ 'parent_id' => $pid, 'custom_order' => data_get($item, 'custom_order', 0), 'name' => data_get($item, 'name'), 'slug' => $slug, 'http_path' => $url ? (is_array($url) ? $url : [$url]) : null, 'http_method' => $method ? (is_array($method) ? $method : [$method]) : null, ]); if ($menu) { $menu_has_permissions = [ ['permission_id' => $permission->id, 'menu_id' => $menu->id] ]; $parent_menu = $menu->parent; do { if ($parent_menu) { array_push($menu_has_permissions, ['permission_id' => $permission->id, 'menu_id' => $parent_menu->id]); $parent_menu = $parent_menu->parent; } }while($parent_menu); DB::table('admin_permission_menu')->insert($menu_has_permissions); } return $permission; } protected function getResourcePermissions($resource) { $maps = [ 'index' => '列表', 'create' => '添加', 'edit' => '修改', 'show' => '详细', 'delete' => '删除' ]; if ($resource == true) { return $maps; } else if (is_array($resource)) { return Arr::only($maps, $resource); } return []; } }