AuthServiceProvider.php 1.6 KB

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