AuthServiceProvider.php 2.1 KB
<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Str;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
//        Product::class => ProductPolicy::class,
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        $this->registerPolicies();

        Gate::guessPolicyNamesUsing(function ($class) {
//           dump(app($class));
           // add by Richer 于 2021年12月24日13:39:31 由于增加了子目录,需要进行特殊的处理
            // 去掉 模型层的主命名空间
            $class = str_replace('App\Models\\', '', $class);
            // 判断是否有子目录
            if (Str::contains($class, '\\')) {
                $class_arr = explode('\\', $class);
                $class = '\\App\\Policies\\'. Arr::first($class_arr) . '\\' .class_basename(Arr::last($class_arr)).'Policy';
            } else {
                $class = '\\App\\Policies\\'.class_basename($class).'Policy';
            }
            return $class;

            // 由于使用了层级结构
            $class = str_replace('\\', '', str_replace('App\Models\\', '', $class)) ;
            return '\\App\\Policies\\'.class_basename($class).'Policy';
        });

//        $this->app->rebinding(
//            'request',
//            function ($app, $request) {
//                $request->setUserResolver(
//                    function ($guard = null) use ($app, $request) {
////                        dd($request);
//                        if ($guard == 'agency') {
//                            return \Admin::user();
//                        } else {
//                            return call_user_func($app['auth']->userResolver(), $guard);
//                        }
//                    }
//                );
//            }
//        );
    }
}