يعمل 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 هي وحدة اجتماعية للمتحمسين. البحث عن أفضل الحلول في تطوير المنتجات والبرامج هو شغفنا.