AuthorityController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Authority;
  4. use App\Components\AsyncResponse;
  5. use App\Services\common\BatchUpdateService;
  6. use App\User;
  7. use Illuminate\Support\Facades\Auth;
  8. use Illuminate\Support\Facades\Validator;
  9. class AuthorityController extends Controller
  10. {
  11. use AsyncResponse;
  12. public function index()
  13. {
  14. $authorities = app("AuthorityService")->format(Authority::query()->get());
  15. return view('maintenance.authority.index',['authorities'=>$authorities]);
  16. }
  17. public function store()
  18. {
  19. $errors = Validator::make(\request()->input(),
  20. ['parent_id'=>['nullable',"integer"],
  21. 'name'=>'required',
  22. 'alias_name'=>['required','unique:authorities,alias_name'],
  23. 'permission'=>'required',
  24. ],[
  25. 'integer'=>':attribute 非法参数',
  26. 'required'=>':attribute 必填',
  27. ],[
  28. 'parent_id'=>'父级',
  29. 'name'=>'权限名',
  30. 'alias_name'=>'唯一标识',
  31. 'permission'=>'许可',
  32. 'unique'=>'重复'
  33. ])->errors();
  34. if ($errors->count()>0)$this->success(["errors"=>$errors]);
  35. $authority = Authority::query()->create([
  36. 'name' => \request("name"),
  37. 'parent_id' => \request("parent_id"),
  38. 'alias_name' => \request("alias_name"),
  39. 'permission' => \request("permission")
  40. ]);
  41. app("AuthorityService")->removeAdminAuth();
  42. $this->success($authority);
  43. }
  44. public function update()
  45. {
  46. $list = request("list");
  47. if (!$list || count($list)<1)$this->success();
  48. array_unshift($list,["id","name"]);
  49. app(BatchUpdateService::class)->batchUpdate("authorities",$list);//更新权限名
  50. app("AuthorityService")->removeAllAuth();//刷掉权限缓存
  51. $updateMenu = [["id","name"]];
  52. $mapping = array_flip(app("MenuService")->getMenuAndAuthorityMapping());//获取菜单与权限映射并反转
  53. foreach (request("list") as $data)if (isset($mapping[$data["id"]]))$updateMenu[] = ["id"=>$mapping[$data["id"]],"name"=>$data["name"]];//验证更新的权限中是否存在有映射关系的缓存并记录
  54. if (count($updateMenu)>1){
  55. app(BatchUpdateService::class)->batchUpdate("menus",$updateMenu);//存在映射关系的缓存更新映射对象
  56. app("MenuService")->setMenu();//重建菜单缓存
  57. }
  58. $this->success();
  59. }
  60. public function destroy()
  61. {
  62. Authority::destroy(request("ids"));
  63. app("AuthorityService")->removeAllAuth();//刷掉权限缓存
  64. $this->success();
  65. }
  66. public function getAuthoritiesApi()
  67. {
  68. /** @var User $user */
  69. $user = Auth::user();
  70. if(!$user) $this->success(null);
  71. if($user && $user->isSuperAdmin()){
  72. $this->success( Authority::query()->orderBy('name')->get());
  73. }
  74. $authority = $user->authorities();
  75. $this->success($authority);
  76. }
  77. }