Laravel - การอนุญาต
ในบทที่แล้วเราได้ศึกษาเกี่ยวกับกระบวนการพิสูจน์ตัวตนใน Laravel บทนี้อธิบายขั้นตอนการอนุญาตใน Laravel
ความแตกต่างระหว่างการพิสูจน์ตัวตนและการอนุญาต
ก่อนดำเนินการต่อเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับขั้นตอนการอนุญาตใน Laravel ขอให้เราเข้าใจความแตกต่างระหว่างการพิสูจน์ตัวตนและการอนุญาต
ใน authenticationระบบหรือเว็บแอปพลิเคชันจะระบุตัวผู้ใช้ผ่านข้อมูลประจำตัวที่ให้ไว้ หากพบว่าข้อมูลประจำตัวนั้นถูกต้องแสดงว่าได้รับการพิสูจน์ตัวตนแล้วมิเช่นนั้นก็ไม่ได้
ใน authorizationระบบหรือเว็บแอปพลิเคชันจะตรวจสอบว่าผู้ใช้ที่พิสูจน์ตัวตนสามารถเข้าถึงทรัพยากรที่พวกเขาพยายามเข้าถึงหรือร้องขอได้หรือไม่ กล่าวอีกนัยหนึ่งก็คือตรวจสอบสิทธิ์และสิทธิ์ของพวกเขาในทรัพยากรที่ร้องขอ หากพบว่าสามารถเข้าถึงทรัพยากรได้แสดงว่าได้รับอนุญาต
ด้วยประการฉะนี้ authentication เกี่ยวข้องกับการตรวจสอบความถูกต้องของข้อมูลรับรองผู้ใช้และ authorization เกี่ยวข้องกับการตรวจสอบสิทธิ์และการอนุญาตเหนือทรัพยากรที่ผู้ใช้รับรองความถูกต้อง
กลไกการอนุญาตใน Laravel
Laravel มีกลไกง่ายๆสำหรับการอนุญาตที่มีสองวิธีหลัก ได้แก่ Gates และ Policies.
การเขียนประตูและนโยบาย
Gates ใช้เพื่อพิจารณาว่าผู้ใช้ได้รับอนุญาตให้ดำเนินการตามที่ระบุหรือไม่ โดยทั่วไปจะถูกกำหนดไว้ในApp/Providers/AuthServiceProvider.phpใช้ซุ้มประตู ประตูยังเป็นฟังก์ชันที่ประกาศสำหรับการดำเนินการกลไกการอนุญาต
มีการประกาศนโยบายภายในอาร์เรย์และใช้ภายในคลาสและเมธอดที่ใช้กลไกการอนุญาต
โค้ดบรรทัดต่อไปนี้อธิบายวิธีใช้เกตส์และนโยบายในการอนุญาตผู้ใช้ในเว็บแอปพลิเคชัน Laravel โปรดทราบว่าในตัวอย่างนี้ไฟล์boot ฟังก์ชันใช้สำหรับการอนุญาตผู้ใช้
<?php
namespace App\Providers;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any application authentication / authorization services.
*
* @param \Illuminate\Contracts\Auth\Access\Gate $gate
* @return void
*/
public function boot(GateContract $gate) {
$this->registerPolicies($gate);
//
}
}