🔹 เกริ่นนำ
นอกจาก Policy แล้ว Laravel ยังมีระบบ Authorization ที่เรียกว่า Gate ซึ่งเหมาะสำหรับกรณีที่ไม่ต้องการผูกกับ Model โดยตรง เช่น ตรวจสอบสิทธิ์ตาม role ของผู้ใช้ หรือสถานะเฉพาะที่ไม่เกี่ยวกับ resource ใด ๆ โดยตรง
Gate มีความยืดหยุ่นสูง สามารถกำหนดได้ที่ AuthServiceProvider
และเรียกใช้ได้ทั้งใน Controller และ View
🔸 การกำหนด Gate ใน AuthServiceProvider
// app/Providers/AuthServiceProvider.php
use Illuminate\Support\Facades\Gate;
public function boot()
{
Gate::define('is-admin', function ($user) {
return $user->role === 'admin';
});
}
🔸 การเรียกใช้ Gate ใน Controller
use Illuminate\Support\Facades\Gate;
if (Gate::allows('is-admin')) {
// ดำเนินการต่อสำหรับแอดมิน
}
if (Gate::denies('is-admin')) {
abort(403);
}
🔸 การใช้ใน Blade Template
@can('is-admin')
<a href="/admin">แผงควบคุมแอดมิน</a>
@endcan
💡 Gate ใช้ได้ดีกับสิทธิ์ทั่วไปที่ไม่จำเป็นต้องผูกกับ Model โดยตรง