
Laravel Ban ช่วยให้การจัดการการห้ามของโมเดล Eloquent ง่ายขึ้น ทำให้โมเดลใดๆ ก็ตามถูกแบนได้ในไม่กี่นาที!
กรณีการใช้งานไม่ได้จำกัดอยู่ที่โมเดลผู้ใช้ โมเดล Eloquent ใดๆ อาจถูกแบนได้: องค์กร ทีม กลุ่ม และอื่นๆ
BanServiceUser โมเดล 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 คือความสามัคคีทางสังคมของผู้ที่ชื่นชอบ การค้นคว้าโซลูชันที่ดีที่สุดในการพัฒนาผลิตภัณฑ์และซอฟต์แวร์คือความมุ่งมั่นของเรา