Laravel:在政策中获取班级名称

时间:2017-11-07 15:28:50

标签: php laravel

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

策略:

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

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";
    }
}

1 个答案:

答案 0 :(得分: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