MenuController.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Authority;
  4. use App\Components\AsyncResponse;
  5. use App\Menu;
  6. use App\Services\common\BatchUpdateService;
  7. use Illuminate\Support\Facades\DB;
  8. class MenuController extends Controller
  9. {
  10. use AsyncResponse;
  11. /**
  12. * Display a listing of the resource.
  13. *
  14. * @return \Illuminate\View\View
  15. */
  16. public function index()
  17. {
  18. return \view("maintenance.menu.index",["menus"=>Menu::query()->orderByRaw("level DESC,sequence")->get()]);
  19. }
  20. public function update()
  21. {
  22. $update = [];
  23. $mapping = app("MenuService")->getMenuAndAuthorityMapping();
  24. $authorityUpdate = [];
  25. if (request()->has("parent_id")){
  26. $update["parent_id"] = request("parent_id");
  27. $authorityUpdate["parent_id"] = request("parent_id") ? ($mapping[request("parent_id")] ?? null) : null;
  28. }
  29. if (request()->has("level"))$update["level"] = request("level");
  30. if (request()->has("name")){
  31. $update["name"] = request("name");
  32. $authorityUpdate["name"] = $mapping[request("name")];
  33. }
  34. if (request()->has("font"))$update["font"] = request("font");
  35. if (request()->has("font_style"))$update["font_style"] = request("font_style");
  36. if (request()->has("route"))$update["route"] = request("route");
  37. if (request()->has("diff")){
  38. $diff = request("diff");
  39. Menu::query()->whereIn("id",request("child"))->update(["level"=>DB::raw("level - {$diff}")]);
  40. }
  41. if ($update && Menu::query()->where("id",request("id"))->update($update)){
  42. app("MenuService")->setMenu();//重建菜单缓存
  43. if ($authorityUpdate && ($mapping[request("id")] ?? null)){
  44. Authority::query()->where("id",$mapping[request("id")])->update($authorityUpdate);
  45. app("AuthorityService")->removeAllAuth();//移除所有用户权限缓存,这将在用户下次访问时重新建立
  46. }
  47. }
  48. $this->success();
  49. }
  50. public function sort()
  51. {
  52. app(BatchUpdateService::class)->batchUpdate("menus",request("update"));
  53. app("MenuService")->setMenu();//重建菜单缓存
  54. $this->success();
  55. }
  56. //菜单更新时 刷掉全部菜单权限缓存 录入时刷掉超管权限 与 附加菜单缓存
  57. public function save()
  58. {
  59. $id = request("id");
  60. $mapping = app("MenuService")->getMenuAndAuthorityMapping();
  61. if ($id){
  62. Menu::query()->where("id",$id)->update([
  63. "name" => request("name"),
  64. "route" => request("route"),
  65. "font" => request("font"),
  66. "font_style" => request("font_style"),
  67. ]);
  68. if ($mapping[$id] ?? false){
  69. $authority = Authority::query()->where("id",$mapping[$id])->first();
  70. if ($authority->name != request("name"))$authority->update(["name"=>request("name")]);
  71. app("AuthorityService")->removeAllAuth();
  72. }
  73. app("MenuService")->setMenu();//重建菜单缓存
  74. $this->success();
  75. }
  76. $menu = Menu::query()->create([
  77. "name" => request("name"),
  78. "route" => request("route"),
  79. "font" => request("font"),
  80. "font_style" => request("font_style"),
  81. "parent_id" => request("parent_id"),
  82. "level" => request("level"),
  83. ]);
  84. //暂时禁止菜单新建时补充权限 留待权限路由绑定后可开启此步骤
  85. /*Authority::query()->create([
  86. 'name' => $menu->name,
  87. 'parent_id' => $mapping[$menu->parent_id] ?? null,
  88. 'alias_name' => $menu->name.$menu->id,
  89. ]);
  90. app("AuthorityService")->removeAdminAuth();//刷掉超管权限缓存*/
  91. app("MenuService")->appendMenu($menu);//为菜单总缓存附加
  92. $this->success($menu);
  93. }
  94. public function delete()
  95. {
  96. $ids = request("ids");
  97. $authIds = [];
  98. $mapping = app("MenuService")->getMenuAndAuthorityMapping();
  99. foreach ($ids as $id)if (isset($mapping[$id]))$authIds[] = $mapping[$id];
  100. Menu::destroy($ids);
  101. app("MenuService")->setMenu();//重建菜单缓存
  102. if ($authIds){
  103. DB::table("authority_role")->whereIn("id_authority",$authIds)->delete();
  104. Authority::destroy($ids);
  105. app("AuthorityService")->removeAllAuth();//移除所有用户权限缓存,这将在用户下次访问时重新建立
  106. }
  107. $this->success();
  108. }
  109. public function get()
  110. {
  111. return app("MenuService")->getVisibleFunctionList();
  112. }
  113. }