Hello,
I have a question regarding policies.
In this controller for example, if (with phpstorm) I click on :
$this->authorize('updateOwnProfile', $user);
Which is in the "edit" method, I am sent directly to the policy called "UserPolicy.php"
I am not understanding why because this userPolicy.php is not attached anywhere in this page.
I see a "$user" variable but not a model.
Any idea how this works please?
Thanks
<?php
namespace App\Http\Controllers;
use App\Http\Requests\UserUpdateRequest;
use App\Models\User;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
use Spatie\Permission\Models\Role;
class ProfileController extends Controller
{
/**
* @param Request $request
* @param User $user
*/
public function edit(Request $request){
$user = Auth::user();
$this->authorize('updateOwnProfile', $user); <--------------------HERE
$roles = Role::get();
return view('app.profile.edit', compact('user', 'roles'));
}
/**
* @param UserUpdateRequest $request
* @param User $user
* @return mixed
* @throws AuthorizationException
*/
public function update(UserUpdateRequest $request, User $user)
{
$this->authorize('update profile', $user);
$validated = $request->validated();
if (empty($validated['password'])) {
unset($validated['password']);
} else {
$validated['password'] = Hash::make($validated['password']);
}
if ($request->hasFile('avatar')) {
if ($user->avatar) {
Storage::delete($user->avatar);
}
$validated['avatar'] = $request->file('avatar')->store('public');
}
$user->update($validated);
$user->syncRoles($request->roles);
return redirect()
->route('profile.edit', $user)
->withSuccess(__('crud.common.saved'));
}
}