Laravel policy always false

sr9yar

I'm trying to allow user to view their own profile in Laravel 5.4.

UserPolicy.php

public function view(User $authUser, $user)
{ 
 return true;
}

registered policy in AuthServiceProvider.php

protected $policies = [
    App\Task::class => App\Policies\TaskPolicy::class,
    App\User::class => App\Policies\UserPolicy::class
];

Routes

Route::group(['middleware' => 'auth'], function() {
  Route::resource('user', 'UserController');
} );

Blade template

@can ( 'view', $user )
// yes
@else
// no
@endcan

UserController.php

public function profile()
{
    return $this->show(Auth::user()->id);
}
public function show($id)
{
    $user = User::find($id);
    return view('user.show', array( 'user'=>$user,'data'=>$this->data ) );
}

The return is always 'false'. Same for calling policy form the controller. Where do I go wrong?

sr9yar

Answering my own question feels weird, but I hate it when I come across questions without followups.

So after double checking It turned out that if I remove authorizeResource from the constructor:

  public function __construct()
  {
    $this->authorizeResource(User::class);
  }

and check for authorization in the controller function:

  $this->authorize('view',$user);

everything works. I must've missed this part when I added $user as a parameter in the policy function. So the user to be viewed is never passed in the authorizeResource method.

Thanks everyone for taking your time to help me.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related