2017-11-07 21 views
0

私は複数のモデルに適用される一般的な方針を書いています。どのようにすれば、認可が必要なクラスのクラス名を取得できますか?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

カスタムゲートが必要です。お使いのコントローラで

:AuthServiceProviderで

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

:あなたはあなたの認可方式のために必要なパラメータを取ることができ

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

を参照してください。
関連する問題