AuthorityController.php 3.3 KB

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