Laravel authorize() true. :
namespace App\Http\Controllers;
use Auth;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function authorizeSameOwner($entity)
{
if (Auth::user()->is_admin) {
return;
}
$this->authorize("same-owner", $entity);
}
}
authorize() , AuthServiceProvider. :
namespace App\Providers;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
];
public function boot(GateContract $gate)
{
$this->registerPolicies($gate);
$gate->define("same-owner", function ($user, $entity) {
if ($user->is_admin) {
return true;
}
if (method_exists($entity, "getOwnerId")) {
$ownerId = $entity->getOwnerId();
} else {
$ownerId = $entity->owner_id;
}
return $user->id === $ownerId;
});
$gate->define("same-user", function ($user, $entity) {
return $user->is_admin || $user->id === $entity->id;
});
}
}
:
public function update(StayRequest $request, Stay $stay)
{
$this->authorizeSameOwner($stay);
$stay->update($request->all());
return redirect()->route("stays.index");
}
public function destroy(Stay $stay)
{
$this->authorizeSameOwner($stay);
$stay->delete();
return redirect()->route("stays.index");
}