Farirai's avatar

getting 403 THIS ACTION IS UNAUTHORIZED. when i try to update a record in my laravel app

am using larvel splade

my controller

<?php

namespace App\Http\Controllers;


use App\Models\Task;
use App\Http\Requests\StoreTaskRequest;
use App\Http\Requests\UpdateTaskRequest;
use ProtoneMedia\Splade\Facades\Toast;
use Illuminate\Support\Facades\Gate;

class TaskController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $tasks = Task::all();
      return view('task.index', compact('tasks'));
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        return view('task.create');
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(StoreTaskRequest $request)
    {
        Task::create($request->validated());

        Toast::title('Success!')
            ->message('Task Created Successfully!')
            ->success()
            ->info()
            ->leftTop()
            ->backdrop()
            ->autoDismiss(3);
        return redirect()->route('task.index');

    }

    /**
     * Display the specified resource.
     */
    public function show(Task $task)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Task $task)
    {
        return view('task.edit',
            ['task' => $task]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(UpdateTaskRequest $request, Task $task)
    {
        $data = $request->validated();

        $task->update($data);

        Toast::title('Success!')
            ->message('Task Edited Successfully!')
            ->success()
            ->info()
            ->leftTop()
            ->backdrop()
            ->autoDismiss(3);
        return redirect()->route('task.index');

    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Task $task)
    {
        $task->delete();

        Toast::title('Success!')
            ->message('Task Deleted Successfully!')
            ->success()
            ->info()
            ->leftTop()
            ->backdrop()
            ->autoDismiss(3);
        return redirect()->route('task.index');
    }
}

my edit blade

<x-layout>
    <x-splade-form confirm="are you sure" :default="$task" :action="route('task.update', $task)" method="PUT"
                   class="w-full md:w-4/12 justify-center mx-auto mt-16 space-y-4 px-5 py-5 bg-white">
        <h1 class="text-xl font-semibold text-center">Create</h1>
        <x-splade-input type="text" name="name" label="Name" class="w-full" />
        <x-splade-textarea type="text" name="description" label="Description" class="w-full" />
        <x-splade-select name="status" label="Status" class="w-full">
            <option value="pending">Pending</option>
            <option value="rejected">Rejected</option>
            <option value="approved">Approved</option>
        </x-splade-select>
        <x-splade-input type="text" name="leftover" label="Leftover" class="w-full" />

        <x-splade-submit
            class="w-full h-10 px-2 mt-3 font-sans font-semibold text-white transition bg-gray-800 rounded hover:bg-gray-200 hover:text-black md:w-28"
            :spinner="true" />
    </x-splade-form>
</x-layout>

0 likes
3 replies
Kortez12's avatar

Can you show UpdateTaskRequest file?

1 like
Farirai's avatar

@Kortez12 thank you the issue is my return was false

<?php

namespace App\Http\Requests;

use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest;

class UpdateTaskRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, ValidationRule|array|string>
     */
    public function rules(): array
    {
        return [
            'name' => 'required',
            'description' => 'required',
            'status' => 'required',
            'leftover' => 'nullable'
        ];
    }
}


Kortez12's avatar

@Farirai It's because of UpdateTaskRequest.php, that you set authorize() method to return false, which means, that no one can submit this form. You need to set this to true

Please or to participate in this conversation.