
يعمل 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 .
Is الكيان غير محظور 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 ();
}وبطبيعة الحال، الوقت المستخدم في الكود أعلاه هو مجرد مثال. اضبطه ليناسب تفضيلاتك الخاصة.
الرجاء مراجعة سجل التغيير للحصول على مزيد من المعلومات حول ما تغير مؤخرًا.
الرجاء مراجعة الترقية للحصول على تعليمات الترقية التفصيلية.
يرجى الاطلاع على المساهمة للحصول على التفاصيل.
قم بإجراء الاختبارات باستخدام:
vendor/bin/phpunitإذا اكتشفت أي مشكلات متعلقة بالأمان، فيرجى إرسال بريد إلكتروني إلى [email protected] بدلاً من استخدام أداة تعقب المشكلات.
انطون كوماريف | بدر الدين شيك سليم | ريك ماك جيليس | أنسيل سي | جو آرتشر |
|---|---|---|---|---|
فرانسيسكو سوليس | جاكوب أداميك | ايليا لازاريف | زيو نايت |
قائمة المساهمين في حظر Laravel
Laravel Ban عبارة عن برنامج مفتوح المصدر مرخص بموجب ترخيص MIT بواسطة Anton Komarev.Fat Boss In Jail مرخصة بموجب Creative Commons 3.0 بواسطة Gan Khoon Lay. CyberCog هي وحدة اجتماعية للمتحمسين. البحث عن أفضل الحلول في تطوير المنتجات والبرامج هو شغفنا.