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>
@endcanGate::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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตรวจสอบสิทธิ์ด้วย Laravel Breeze
- การปกป้องเส้นทางด้วยมิดเดิลแวร์
- Gates: การตรวจสอบสิทธิ์แบบง่าย
- Policies: การอนุญาตตามโมเดล