ปัญหาเกต Laravel

ฉันกำลังพยายามตรวจสอบว่าผู้ใช้ได้รับอนุญาตให้ดูเพจโดยใช้ Gates และนโยบายใน Laravel หรือไม่ ใน web.php ของฉัน ฉันมีเส้นทาง:

$litter = Litter::find($id);

//Security gate
if(Gate::allows('edit-litter', Auth::user(), $litter)){
  return View::make('mykennel.litters.pupsheet')->with([
    //some variables
  ]);
}else{
  $ip_info = log_user_connection('Authorization Error');
  return View::make('errors.authorization')->with([
    'ip_info' => $ip_info,
    'litter_id' => $litter->id,
    'user_id' => Auth::user()->id,
    'litter_user' => $litter->user_id
  ]);
}

นโยบายของฉันเป็นเช่นนี้ (AuthServiceProvider.php):

public function boot()
  {
      $this->registerPolicies();

      Gate::define('edit-litter', function ($user, $litter) {
          return $user->id == $litter->user_id;
      });
  }

เมื่อฉันทดสอบสิ่งนี้ ฉันมักจะได้รับข้อผิดพลาดการรับรองความถูกต้องเท่านั้น ดังนั้นฉันจึงตัดสินใจตรวจสอบว่าฉันไม่เห็นบางสิ่งบางอย่างหรือไม่โดยการส่งตัวแปรเหล่านั้นด้านบนไปยังมุมมองข้อผิดพลาด และแน่นอนว่า user_id เท่ากับ litter_user (สองสิ่งที่ฉัน ฉันกำลังเปรียบเทียบ):

{$litter_user}}, {{$user_id}} //returns '55, 55'

ฉันพลาดบางสิ่งบางอย่างที่ชัดเจนไปหรือเปล่า? ความช่วยเหลือใด ๆ ที่ชื่นชม


person Vranvs    schedule 18.08.2018    source แหล่งที่มา
comment
คุณไม่ส่งผู้ใช้ไปที่เกต ... คุณเพียงส่งทรัพยากรเท่านั้น เกตจะรู้ว่าผู้ใช้ที่ได้รับการรับรองความถูกต้องแล้วคืออะไร Gate::allows('ability', $resourceToCheck)   -  person lagbox    schedule 18.08.2018


คำตอบ (1)


ดูเหมือนว่าคุณกำลังตรวจสอบความสามารถผิดวิธี

ฟังก์ชัน allows() ต้องการพารามิเตอร์สองตัว ตัวแรกคือความสามารถ และตัวที่สองคืออาร์เรย์ของอาร์กิวเมนต์

public function allows($ability, $arguments = [])
{
    return $this->check($ability, $arguments);
}

แต่คุณกำลังเรียกมันว่า:

Gate::allows('edit-litter', Auth::user(), $litter)

นั่นอาจเป็นสาเหตุที่รหัสของคุณใช้งานไม่ได้

ดังนั้นเปลี่ยนเป็น:

Gate::allows('edit-litter', $litter) 

แล้วลองอีกครั้งเพราะ laravel จะตรวจสอบผู้ใช้ที่ได้รับการรับรองความถูกต้องโดยอัตโนมัติ

person Afraz Ahmad    schedule 18.08.2018
comment
ดีใจที่ได้ยินว่ามันช่วยได้ :) - person Afraz Ahmad; 18.08.2018