AuthServiceProvider.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace App\Providers;
  3. use App\Authority;
  4. use App\Services\AuthorityService;
  5. use App\User;
  6. use Illuminate\Support\Facades\Auth;
  7. use Illuminate\Support\Facades\Cache;
  8. use Illuminate\Support\Facades\Gate;
  9. use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
  10. use Illuminate\Support\Facades\Schema;
  11. class AuthServiceProvider extends ServiceProvider
  12. {
  13. /**
  14. * The policy mappings for the application.
  15. *
  16. * @var array
  17. */
  18. protected $policies = [
  19. // 'App\Model' => 'App\Policies\ModelPolicy',
  20. ];
  21. /**
  22. * Register any authentication / authorization services.
  23. *
  24. * @return void
  25. */
  26. public function boot()
  27. {
  28. $this->registerPolicies();
  29. $isSuperAdmin = null;
  30. if(!Schema::hasTable('users')){return;}
  31. Gate::before(function ($user)use(&$isSuperAdmin) {
  32. if($isSuperAdmin===null){
  33. $isSuperAdmin=$user->isSuperAdmin();
  34. }
  35. if ($isSuperAdmin) {
  36. Cache::put('isSuperAdmin', true);
  37. }else{
  38. Cache::put('isSuperAdmin', false);
  39. }
  40. });
  41. if(!Schema::hasTable('authorities')){return;}
  42. /** @var AuthorityService $authorityService */
  43. $authorityService=app('authorityService');
  44. $authorities = $authorityService->getAll();
  45. foreach($authorities as $authority) {
  46. Gate::define($authority->name, function($user) use ($authority) {
  47. if(Cache::get('isSuperAdmin')){
  48. if($authority['permission']=='允许'){
  49. return true;
  50. }
  51. }
  52. return $user->hasRole($authority->roles);
  53. });
  54. }
  55. }
  56. }