diff --git a/database/seeders/AdminSeeder.php b/database/seeders/AdminSeeder.php new file mode 100644 index 0000000..96e7653 --- /dev/null +++ b/database/seeders/AdminSeeder.php @@ -0,0 +1,89 @@ + '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' => (string)Str::uuid(), + '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 . '*'; + } +}