Laravel Ban ช่วยให้การจัดการการห้ามของโมเดล Eloquent ง่ายขึ้น ทำให้โมเดลใดๆ ก็ตามถูกแบนได้ในไม่กี่นาที!
กรณีการใช้งานไม่ได้จำกัดอยู่ที่โมเดลผู้ใช้ โมเดล Eloquent ใดๆ อาจถูกแบนได้: องค์กร ทีม กลุ่ม และอื่นๆ
BanService
User
โมเดล Eloquent ใดๆ ก็สามารถถูกแบนได้ban
และ unban
ขั้นแรก ให้ดึงแพ็คเกจผ่าน Composer:
composer require cybercog/laravel-ban
แพ็คเกจจะลงทะเบียนเองโดยอัตโนมัติ ขั้นตอนนี้จำเป็นสำหรับ Laravel 5.4 หรือรุ่นก่อนหน้าเท่านั้น
รวมผู้ให้บริการภายใน app/config/app.php
:
' providers ' => [
Cog Laravel Ban Providers BanServiceProvider::class,
],
ในที่สุด คุณจะต้องเผยแพร่และดำเนินการย้ายฐานข้อมูล:
php artisan vendor:publish --provider= " CogLaravelBanProvidersBanServiceProvider " --tag= " migrations "
php artisan migrate
use Cog Contracts Ban Bannable as BannableInterface ;
use Cog Laravel Ban Traits Bannable ;
use Illuminate Foundation Auth User as Authenticatable ;
class User extends Authenticatable implements BannableInterface
{
use Bannable;
}
โมเดลที่แบนได้จะต้องมีคอลัมน์ nullable timestamp
ชื่อ banned_at
ค่านี้ใช้เป็นแฟล็กและลดความซับซ้อนในการตรวจสอบว่าผู้ใช้ถูกแบนหรือไม่ หากคุณกำลังพยายามทำให้โมเดลผู้ใช้ Laravel เริ่มต้นเป็นแบบแบนได้ คุณสามารถใช้ตัวอย่างด้านล่าง
php artisan make:migration add_banned_at_column_to_users_table
จากนั้นใส่รหัสต่อไปนี้ลงในไฟล์การโยกย้าย:
<?php
use Illuminate Database Migrations Migration ;
use Illuminate Database Schema Blueprint ;
use Illuminate Support Facades Schema ;
return new class extends Migration
{
public function up (): void
{
Schema:: table ( ' users ' , function ( Blueprint $ table ) {
$ table -> timestamp ( ' banned_at ' )-> nullable ();
});
}
public function down (): void
{
Schema:: table ( ' users ' , function ( Blueprint $ table ) {
$ table -> dropColumn ( ' banned_at ' );
});
}
};
$ user -> ban ();
$ user -> ban ([
' comment ' => ' Enjoy your ban! ' ,
]);
$ user -> ban ([
' expired_at ' => ' 2086-03-28 00:00:00 ' ,
]);
แอตทริบิวต์ expired_at
อาจเป็นอินสแตนซ์ CarbonCarbon
หรือสตริงใด ๆ ที่สามารถแยกวิเคราะห์โดย CarbonCarbon::parse($string)
วิธีการ:
$ user -> ban ([
' expired_at ' => ' +1 month ' ,
]);
$ user -> unban ();
ใน unban
แบนโมเดลการแบนที่เกี่ยวข้องทั้งหมดจะเป็นการลบแบบนุ่มนวล
$ user -> isBanned ();
$ user -> isNotBanned ();
app ( Cog Contracts Ban BanService::class)-> deleteExpiredBans ();
$ ban = $ user -> ban ();
$ ban -> isPermanent (); // true
หรือส่งผ่านค่า null
$ ban = $ user -> ban ([
' expired_at ' => null ,
]);
$ ban -> isPermanent (); // true
$ ban = $ user -> ban ([
' expired_at ' => ' 2086-03-28 00:00:00 ' ,
]);
$ ban -> isTemporary (); // true
$ users = User:: withoutBanned ()-> get ();
$ users = User:: withBanned ()-> get ();
$ users = User:: onlyBanned ()-> get ();
หากต้องการใช้ขอบเขตการสืบค้นตลอดเวลา คุณสามารถกำหนดวิธี shouldApplyBannedAtScope
ในโมเดลที่แบนได้ หากวิธีการคืนค่า true
โมเดลที่ถูกแบนทั้งหมดจะถูกซ่อนไว้ตามค่าเริ่มต้น
use Cog Contracts Ban Bannable as BannableInterface ;
use Cog Laravel Ban Traits Bannable ;
use Illuminate Foundation Auth User as Authenticatable ;
class User extends Authenticatable implements BannableInterface
{
use Bannable;
/**
* Determine if BannedAtScope should be applied by default.
*
* @return bool
*/
public function shouldApplyBannedAtScope ()
{
return true ;
}
}
ถ้าเอนทิตีถูกแบน เหตุการณ์ CogLaravelBanEventsModelWasBanned
จะเริ่มทำงาน
เอนทิตีถูกยกเลิกการแบน CogLaravelBanEventsModelWasUnbanned
เหตุการณ์เริ่มทำงานแล้ว
แพ็คเกจนี้มีมิดเดิลแวร์เส้นทางที่ออกแบบมาเพื่อป้องกันไม่ให้ผู้ใช้ที่ถูกแบนไปยังเส้นทางที่มีการป้องกัน
หากต้องการใช้ ให้กำหนดมิดเดิลแวร์ใหม่ในอาร์เรย์ $routeMiddleware
ของไฟล์ app/Http/Kernel.php
:
protected $ routeMiddleware = [
' forbid-banned-user ' => Cog Laravel Ban Http Middleware ForbidBannedUser::class,
]
จากนั้นใช้ในเส้นทางและกลุ่มเส้นทางใดๆ ที่คุณต้องการปกป้อง:
Route:: get ( ' / ' , [
' uses ' => ' UsersController@profile ' ,
' middleware ' => ' forbid-banned-user ' ,
]);
หากคุณต้องการบังคับให้ผู้ใช้ที่ถูกแบนออกจากระบบในการเข้าถึงเส้นทางที่มีการป้องกัน ให้ใช้มิดเดิลแวร์ LogsOutBannedUser
แทน:
protected $ routeMiddleware = [
' logs-out-banned-user ' => Cog Laravel Ban Http Middleware LogsOutBannedUser::class,
]
หลังจากที่คุณดำเนินการติดตั้งขั้นพื้นฐานแล้ว คุณสามารถเริ่มใช้คำสั่ง ban:delete-expired
ในกรณีส่วนใหญ่ คุณจะต้องกำหนดเวลาคำสั่งเหล่านี้ เพื่อที่คุณจะได้ไม่ต้องรันคำสั่งด้วยตนเองทุกครั้งที่คุณต้องการลบการแบนและโมเดลที่เลิกแบนที่หมดอายุ
คำสั่งสามารถกำหนดเวลาได้ในเคอร์เนลคอนโซลของ Laravel เช่นเดียวกับคำสั่งอื่น ๆ
// app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' ban:delete-expired ' )-> everyMinute ();
}
แน่นอนว่าเวลาที่ใช้ในโค้ดด้านบนเป็นเพียงตัวอย่างเท่านั้น ปรับให้เหมาะกับความต้องการของคุณเอง
โปรดดู CHANGELOG สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่เปลี่ยนแปลงเมื่อเร็วๆ นี้
โปรดดูการอัปเกรดสำหรับคำแนะนำการอัปเกรดโดยละเอียด
โปรดดูการมีส่วนร่วมเพื่อดูรายละเอียด
รันการทดสอบด้วย:
vendor/bin/phpunit
หากคุณพบปัญหาที่เกี่ยวข้องกับความปลอดภัย โปรดส่งอีเมลไปที่ [email protected] แทนการใช้ตัวติดตามปัญหา
อันตัน โคมาเรฟ | บาดร์ อัลดีน เช็ค ซาลิม | ริค แม็ค กิลลิส | แอนเซลล์ซี | โจ อาร์เชอร์ |
---|---|---|---|---|
ฟรานซิสโก โซลิส | ยาคุบ อดาเมค | อิเลีย ลาซาเรฟ | ซีโอไนท์ |
รายชื่อผู้ร่วมให้ข้อมูล Laravel Ban
Laravel Ban
เป็นซอฟต์แวร์โอเพ่นซอร์สที่ได้รับอนุญาตภายใต้ใบอนุญาต MIT โดย Anton KomarevFat Boss In Jail
ได้รับอนุญาตภายใต้ Creative Commons 3.0 โดย Gan Khoon Lay CyberCog คือความสามัคคีทางสังคมของผู้ที่ชื่นชอบ การค้นคว้าโซลูชันที่ดีที่สุดในการพัฒนาผลิตภัณฑ์และซอฟต์แวร์คือความมุ่งมั่นของเรา