0Pricing
PHP Academy · บทเรียน

Gates: การตรวจสอบสิทธิ์แบบง่าย

กำหนดและประเมิน gates สำหรับตรรกะการอนุญาตให้ผู้ใช้ดำเนินการ

Gates: การตรวจสอบสิทธิ์แบบง่าย เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

เกตคืออะไร

เกต ของ Laravel คือฟังก์ชันปิดที่ใช้ตัดสินว่าผู้ใช้ได้รับอนุญาตให้ดำเนินการที่กำหนดหรือไม่ เกตเป็นการตรวจสอบการอนุมัติสิทธิ์แบบง่ายและใช้ได้ทั่วทั้งระบบ โดยไม่ผูกกับโมเดลใดโมเดลหนึ่งโดยเฉพาะ

การกำหนดเกต

กำหนดเกตใน App\Providers\AppServiceProvider หรือ AuthServiceProvider ที่สร้างขึ้นโดยเฉพาะ โดยใช้ส่วนติดต่อ Gate

<?php
use Illuminate\Support\Facades\Gate;

// In a service provider's boot() method:
Gate::define("delete-post", function (User $user, Post $post) {
    return $user->id === $post->user_id;
});

การตรวจสอบเกต (อนุญาตหรือปฏิเสธ)

ตรวจสอบผลลัพธ์ของเกตด้วย Gate::allows() หรือ Gate::denies()

<?php
if (Gate::allows("delete-post", $post)) {
    $post->delete();
}

if (Gate::denies("delete-post", $post)) {
    abort(403);
}

authorize() ในตัวควบคุม

เรียก $this->authorize() ภายในตัวควบคุม ซึ่งจะโยน AuthorizationException (403) โดยอัตโนมัติเมื่อไม่ผ่านการตรวจสอบ

<?php
public function destroy(Post $post): RedirectResponse
{
    $this->authorize("delete-post", $post);
    $post->delete();
    return redirect()->route("posts.index");
}

@can ใน Blade

ใช้คำสั่ง @can เพื่อแสดงส่วนติดต่อผู้ใช้ตามเงื่อนไข โดยอิงจากผลการตรวจสอบเกต

@can('delete-post', $post)
    <form method="POST" action="/posts/{{ $post->id }}">
        @csrf @method('DELETE')
        <button>Delete</button>
    </form>
@endcan

Gate::before

ฟังก์ชันเรียกกลับ before จะทำงานก่อนการตรวจสอบเกตอื่นทั้งหมด ซึ่งมีประโยชน์สำหรับการให้ผู้ดูแลระบบเข้าถึงทุกอย่าง

<?php
Gate::before(function (User $user, string $ability) {
    if ($user->isAdmin()) return true; // skip further checks
});

Gate::after

after จะทำงานหลังการตรวจสอบเกตทั้งหมด หากส่งคืนค่าไม่ใช่ null ค่านั้นจะเขียนทับผลลัพธ์ของเกต

การส่งคืนการตอบกลับ

เกตสามารถส่งคืนออบเจ็กต์ Response เพื่อกำหนดข้อความแสดงข้อผิดพลาดเองได้

<?php
Gate::define("publish-post", function (User $user, Post $post) {
    return $user->isEditor()
        ? Response::allow()
        : Response::deny("You must be an editor to publish.");
});

forUser()

ตรวจสอบเกตสำหรับผู้ใช้อื่นที่ไม่ใช่ผู้ใช้ที่ยืนยันตัวตนอยู่

<?php
if (Gate::forUser($otherUser)->allows("delete-post", $post)) {
    // ...
}

ผู้ใช้แบบผู้เยี่ยมชม

โดยค่าเริ่มต้น เกตจะส่งคืนค่า false โดยอัตโนมัติสำหรับผู้ใช้ที่ยังไม่ได้ยืนยันตัวตน กำหนดชนิดของผู้ใช้ให้รองรับค่า null เพื่อให้ตรวจสอบผู้ใช้แบบผู้เยี่ยมชมได้

<?php
Gate::define("view-post", function (?User $user, Post $post) {
    return $post->is_published || $user?->id === $post->user_id;
});

เกตกับนโยบาย

เกตคือฟังก์ชันปิดแบบง่ายสำหรับการตรวจสอบเฉพาะกรณี ส่วนนโยบายคือคลาสสำหรับการอนุมัติสิทธิ์ตามโมเดล ให้ใช้นโยบายเมื่อมีการดำเนินการหลายอย่างกับโมเดลเดียวกัน

สรุป

เกตคือฟังก์ชันปิดสำหรับการอนุมัติสิทธิ์ทั่วทั้งระบบ กำหนดเกตในผู้ให้บริการบริการ ตรวจสอบด้วย Gate::allows() $this->authorize() หรือ @can ใน Blade

ตรวจสอบความเข้าใจอย่างรวดเร็ว

เมธอดใดของตัวควบคุมที่โยน 403 โดยอัตโนมัติเมื่อเกตไม่ผ่าน

คำถามที่พบบ่อย

บทเรียน “Gates: การตรวจสอบสิทธิ์แบบง่าย” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Gates: การตรวจสอบสิทธิ์แบบง่าย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Gates: การตรวจสอบสิทธิ์แบบง่าย”

กำหนดและประเมิน gates สำหรับตรรกะการอนุญาตให้ผู้ใช้ดำเนินการ คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “Gates: การตรวจสอบสิทธิ์แบบง่าย” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม

ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตรวจสอบสิทธิ์ด้วย Laravel Breeze
  2. การปกป้องเส้นทางด้วยมิดเดิลแวร์
  3. Gates: การตรวจสอบสิทธิ์แบบง่าย
  4. Policies: การอนุญาตตามโมเดล
← กลับไปที่ PHP Academy