【问题标题】:Laravel: Get class name in policyLaravel:在策略中获取类名
【发布时间】:2018-04-20 01:43:49
【问题描述】:

我正在编写适用于多个模型的一般政策。如何获取需要授权的类的类名?

政策:

protected $policies = [
    'App\User' => 'App\Policies\ModelPolicy',
    'App\Customer' => 'App\Policies\ModelPolicy',
];

模型政策:

class ModelPolicy
{
    use HandlesAuthorization;

    /**
     * Create a new policy instance.
     *
     * @return void
     */
    public function __construct()
    {

    }

    public function index(User $user){
        // how can I retrieve the class name, like User or Customer?
        return true;
    }
}

这是例如我的客户控制器。因此,在策略中,我想检索以下内容:App\Customer。

class CustomerController extends Controller
{
    public function index(){
        $this->authorize('index', Customer::class);
        echo "test";
    }
}

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您需要自定义门。

    在您的控制器中:

    $this->authorize('model-index', Appointment::first());
    

    在 AuthServiceProvider 中:

    Gate::define('model-index', function ($user, $model) {
        var_dump(get_class($model));
        die();
    });
    

    这样您就可以获取授权方法所需的参数。

    请看

    https://laravel.com/docs/5.5/authorization#gates

    Laravel Policies - How to Pass Multiple Arguments to function

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多