2017-06-01 2 views
0

ユーザのプロファイルにアクセスするためのポリシー(表示、編集)を登録しました。表示しようとしているプロファイルは、あなたが「どのプロファイルの編集」権限を持っているあなた Laravel Policy - コントローラから送信された間違ったユーザ

  • に属し

    • :場合、私はそれを許すいずれか 。

    ので、これは政策の私view() -functionです:

    public function show(User $user) { 
         debug('User in Controller: '.$user->id); 
         $this->authorize('view', $user); 
    
         return view('profile.index')->with([ 
          "user" => $user, 
         ]); 
        } 
    

    そして最後にルート:

    public function view(User $user) 
        { 
         debug('User in Controller: '.$user->id); 
         return (Auth::user()->id === $user->id) || Auth::user()->can('edit any profile'); 
        } 
    

    これはProfileControllerから取られたプロファイルビューを表示する方法であり、

    Route::get('/profile/{user}', '[email protected]')->name('profile');

    はもちろん、ポリシーはAuthServiceProviderに登録されました:

    protected $policies = [ 
         'App\Model' => 'App\Policies\ModelPolicy', 
         User::class => ProfilePolicy::class, 
        ]; 
    

    基本的には、コントローラは、ポリシーに間違ったユーザーを送信します。ここでは、それぞれのdebug()年代から両方メッセージです:

    enter image description here

  • 答えて

    0

    だから私は自分の質問に答えることを好きではないが、私は、問題が何であったかが分かりました。ポリシー関数の最初のパラメータは、常に現在のユーザーのインスタンスです。

    だからあなたは単にあなたのポリシーでこれを持つことができます。

    public function view(User $currentUser, User $user) 
        { 
         return $currentUser->is($user) || $currentUser->can('edit any profile'); 
        } 
    

    Laravelは自動的Auth::user()から$currentUserを設定します。

    関連する問題