Menu::query()->orderByRaw("level DESC,sequence")->get()]); } public function update() { $this->gate("基础设置-菜单-编辑"); $update = []; $mapping = app("MenuService")->getMenuAndAuthorityMapping(); $authorityUpdate = []; if (request()->has("parent_id")){ $update["parent_id"] = request("parent_id"); $authorityUpdate["parent_id"] = request("parent_id") ? ($mapping[request("parent_id")] ?? null) : null; } if (request()->has("level"))$update["level"] = request("level"); if (request()->has("name")){ $update["name"] = request("name"); $authorityUpdate["name"] = $mapping[request("name")]; } if (request()->has("font"))$update["font"] = request("font"); if (request()->has("font_style"))$update["font_style"] = request("font_style"); if (request()->has("route"))$update["route"] = request("route"); if (request()->has("diff")){ $diff = request("diff"); Menu::query()->whereIn("id",request("child"))->update(["level"=>DB::raw("level - {$diff}")]); } if ($update && Menu::query()->where("id",request("id"))->update($update)){ app("MenuService")->setMenu();//重建菜单缓存 if ($authorityUpdate && ($mapping[request("id")] ?? null)){ Authority::query()->where("id",$mapping[request("id")])->update($authorityUpdate); app("AuthorityService")->removeAllAuth();//移除所有用户权限缓存,这将在用户下次访问时重新建立 } } $this->success(); } public function sort() { $this->gate("基础设置-菜单-编辑"); app(BatchUpdateService::class)->batchUpdate("menus",request("update")); app("MenuService")->setMenu();//重建菜单缓存 $this->success(); } //菜单更新时 刷掉全部菜单权限缓存 录入时刷掉超管权限 与 附加菜单缓存 public function save() { $id = request("id"); $mapping = app("MenuService")->getMenuAndAuthorityMapping(); if ($id){ $this->gate("基础设置-菜单-编辑"); Menu::query()->where("id",$id)->update([ "name" => request("name"), "route" => request("route"), "font" => request("font"), "font_style" => request("font_style"), ]); if ($mapping[$id] ?? false){ $authority = Authority::query()->where("id",$mapping[$id])->first(); if ($authority->name != request("name"))$authority->update(["name"=>request("name")]); app("AuthorityService")->removeAllAuth(); } app("MenuService")->setMenu();//重建菜单缓存 $this->success(); } $this->gate("基础设置-菜单-录入"); $menu = Menu::query()->create([ "name" => request("name"), "route" => request("route"), "font" => request("font"), "font_style" => request("font_style"), "parent_id" => request("parent_id"), "level" => request("level"), ]); //增加菜单权限 Authority::query()->create([ 'name' => $menu->name, 'parent_id' => $mapping[$menu->parent_id] ?? null, 'alias_name' => app("MenuService")->getUniqueName($menu), ]); app("AuthorityService")->removeAdminAuth();//刷掉超管权限缓存 app("MenuService")->appendMenu($menu);//为菜单总缓存附加 $this->success($menu); } public function delete() { $this->gate("基础设置-菜单-删除"); $ids = request("ids"); $authIds = []; $mapping = app("MenuService")->getMenuAndAuthorityMapping(); foreach ($ids as $id)if (isset($mapping[$id]))$authIds[] = $mapping[$id]; Menu::destroy($ids); app("MenuService")->setMenu();//重建菜单缓存 if ($authIds){ DB::table("authority_role")->whereIn("id_authority",$authIds)->delete(); Authority::destroy($ids); app("AuthorityService")->removeAllAuth();//移除所有用户权限缓存,这将在用户下次访问时重新建立 } $this->success(); } public function get() { return app("MenuService")->getVisibleFunctionList(); } }