Dev to webs {Coding…}

ร บทเรียนฟรีด้านการพัฒนาซอฟต์แวร์ ที่ครอบคลุมเนื้อหาหลากหลาย ตั้งแต่การเขียนโค้ดพื้นฐานไปจนถึงเทคนิคขั้นสูง

บทที่ 6: การใช้ Gate เพื่อกำหนดสิทธิ์

🔹 เกริ่นนำ

นอกจาก 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 โดยตรง