Access restrictions laravel method

Bismillah, disini saya ingin bertanya mengenai kode yang saya buat untuk memproteksi kemungkinan data dari user lain tidak bisa diakses dan user hanya bisa mengakses data yang telah dibuat si user itu sendiri bukan data user lain. Maka dari itu, saya membuat kodenya di Controller. Namun sebelumnya saya ingin menampilkan Relasi dari 2 Model yakni User dan Task. Nah, nanti yang akan dijadikan bahan proteksi adalah membandingkan id dari user ang sedang aktif atau dari Auth dengan user_id yag ada di table task yang dimana itu telah dibuat oleh user. Akan tetapi, setelah saya coba membandingkan keduanya itu sebelum bisa diakses malah beralih ke data milik user sendiri bukan data yang telah saya buat sendiri. Padahal sudah jelas, pada saat membuat data tersebut saya sudah memasukkan user_id dengan menggunakan Auth::id() namun setelah berhasil dibuat datanya, saya coba edit data yang sudah saya buat dan hasilnya malah data orang lain yang muncul. Padahal datanya sudah saya lihat di database untuk semuanya oke-oke aja bahkan user_id sudah terisi id saya bukan orang lain. Itulah yang menjadi permasalahannya. Mungkin untuk lebih memperjelas bisa melihat kode saya dibawah ini:

Model User

```

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    protected $table = "users";

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'nickname',
        'google_id',
        'avatar',
        'roles',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    protected $dates = ["created_at","updated_at"];


    public function artikels()
    {
        return $this->hasMany(Artikel::class,"user_id");
    }

    public function tasks()
    {
        return $this->hasMany(Task::class,"user_id");
    }

    public function profile()
    {
        return $this->hasOne(Profile::class,"user_id");
    }
}

```

Model Task


```&lt;?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    use HasFactory;

    protected $table = &quot;task&quot;;

    protected $primaryKey = &quot;id&quot;;

    public function user()
    {
        return $this-&gt;belongsTo(User::class,&quot;id&quot;);
    }
}
```

TaskController yang saya maksud untuk proteksi method edit:

```
&lt;?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Task;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;

class TaskController extends Controller
{
    public function __construct()
    {
        //
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $data = Auth::user()-&gt;tasks()-&gt;get();
        return view(&quot;Admin.task.index&quot;,[&quot;tasks&quot; =&gt; $data]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request-&gt;validate([
            &quot;title&quot; =&gt; &quot;required&quot;
        ]);

            DB::table(&quot;task&quot;)-&gt;insert([
                &quot;title&quot; =&gt; $request-&gt;title,
                &quot;slug&quot; =&gt; Str::slug($request-&gt;title,&quot;-&quot;),
                &quot;status&quot; =&gt; &quot;belum&quot;,
                &quot;user_id&quot; =&gt; Auth::Id()
            ]);

        return redirect()-&gt;back();
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {

        $data = Task::findOrFail($id);
        if(Auth::user()-&gt;id == $data-&gt;user_id)
        {
        // dd($data);
        return view(&quot;Admin.task.edit&quot;,[&quot;tasks&quot; =&gt; $data]);
        }else{
            dd($data-&gt;title); // ini malah muncul punya user lain
            dd(Auth::Id()); // ini muncul id user saya sendiri
            return abort(403);
        }
    }

}

```

View index :

```

@foreach($tasks as $task)
 &lt;tr&gt;
 &lt;td&gt;{{$loop-&gt;iteration}}&lt;/td&gt;
 &lt;td&gt;{{$task-&gt;title}} &lt;/td&gt;
 &lt;td&gt;{{$task-&gt;status}}&lt;/td&gt;
 &lt;td&gt;
 &lt;a href=&quot;/admin/task/{{$task-&gt;id}}/delete&quot; class=&quot;btn btn-sm btn-danger&quot; onclick=&quot;return confirm(&#039;Are you sure?&#039;)&quot;&gt;
 Delete
 &lt;/a&gt;
 &lt;a href=&quot;/admin/task/{{$task-&gt;id}}/edit&quot; class=&quot;btn btn-sm btn-warning&quot;&gt;
 Edit
 &lt;/a&gt;
 &lt;/td&gt;
 &lt;/tr&gt;
 @endforeach

```

avatar Ihzarizky
@Ihzarizky

39 Kontribusi 9 Poin

Diperbarui 2 tahun yang lalu

Tanggapan

Kalau yang muncul malah task lain saat mengedit, berarti masalahnya , "id" task yang dioper ke fungsi edit memang beda dari yang kamu mau

Itu yang harus dibenahi yang mananya mas berarti?

Belum ada Jawaban. Jadi yang pertama Jawaban

Login untuk ikut Jawaban