1
0
Fork 0
medical-record-server/database/seeders/AdminSeeder.php

93 lines
2.5 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Slowlyo\OwlAdmin\Models\AdminMenu;
use Slowlyo\OwlAdmin\Models\AdminPermission;
use Slowlyo\OwlAdmin\Models\AdminRole;
use Slowlyo\OwlAdmin\Models\AdminUser;
class AdminSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('admin_role_permissions')->truncate();
DB::table('admin_role_users')->truncate();
AdminUser::truncate();
$user = AdminUser::create([
'username' => 'admin',
'password' => bcrypt('admin'),
'name' => 'Administrator',
]);
AdminRole::truncate();
$role = AdminRole::create([
'name' => 'Administrator',
'slug' => 'administrator',
]);
$user->roles()->attach($role);
$menus = AdminMenu::all()->toArray();
$permissions = [];
foreach ($menus as $menu) {
$_httpPath = $menu['url_type'] == AdminMenu::TYPE_ROUTE ? $this->getHttpPath($menu['url']) : '';
$permissions[] = [
'id' => $menu['id'],
'name' => $menu['title'],
'slug' => 'permission_'.$menu['id'],
'http_path' => json_encode($_httpPath ? [$_httpPath] : ''),
'order' => $menu['order'],
'parent_id' => $menu['parent_id'],
'created_at' => $menu['created_at'],
'updated_at' => $menu['updated_at'],
];
}
AdminPermission::query()->truncate();
AdminPermission::query()->insert($permissions);
DB::table('admin_permission_menu')->truncate();
foreach ($permissions as $item) {
$query = DB::table('admin_permission_menu');
$query->insert([
'permission_id' => $item['id'],
'menu_id' => $item['id'],
]);
$_id = $item['id'];
while ($item['parent_id'] != 0) {
(clone $query)->insert([
'permission_id' => $_id,
'menu_id' => $item['parent_id'],
]);
$item = AdminMenu::query()->find($item['parent_id']);
}
}
}
private function getHttpPath($uri)
{
$excepts = ['/', '', '-'];
if (in_array($uri, $excepts)) {
return '';
}
if (! str_starts_with($uri, '/')) {
$uri = '/'.$uri;
}
return $uri.'*';
}
}