1
0
Fork 0
owl-admin-starter/database/seeders/AdminPermissionSeeder.php

122 lines
4.9 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Slowlyo\OwlAdmin\Models\{AdminMenu, AdminPermission};
class AdminPermissionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
DB::table('admin_menus')->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;
}
if (is_array($resource)) {
return Arr::only($maps, $resource);
}
return data_get($maps, $resource);
}
}