Laravel Ban menyederhanakan pengelolaan larangan model Eloquent. Jadikan model apa pun dapat diblokir dalam hitungan menit!
Kasus penggunaan tidak terbatas pada model Pengguna, model Eloquent apa pun dapat dilarang: Organisasi, Tim, Grup, dan lainnya.
BanService
.User
, model Eloquent apa pun dapat dilarang.ban
dan unban
pelarangan model.Pertama, tarik paket melalui Komposer:
composer require cybercog/laravel-ban
Paket akan otomatis mendaftar sendiri. Langkah ini hanya diperlukan untuk Laravel 5.4 atau rilis sebelumnya.
Sertakan penyedia layanan dalam app/config/app.php
:
' providers ' => [
Cog Laravel Ban Providers BanServiceProvider::class,
],
Terakhir, Anda perlu mempublikasikan dan menjalankan migrasi database:
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;
}
Model yang dapat diblokir harus memiliki kolom nullable timestamp
bernama banned_at
. Nilai ini digunakan sebagai tanda dan menyederhanakan pemeriksaan jika pengguna diblokir. Jika Anda mencoba membuat model Pengguna Laravel default menjadi dapat diblokir, Anda dapat menggunakan contoh di bawah ini.
php artisan make:migration add_banned_at_column_to_users_table
Kemudian masukkan kode berikut ke dalam file migrasi:
<?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 ' ,
]);
Atribut expired_at
dapat berupa instance CarbonCarbon
atau string apa pun yang dapat diurai dengan metode CarbonCarbon::parse($string)
:
$ user -> ban ([
' expired_at ' => ' +1 month ' ,
]);
$ user -> unban ();
Saat unban
semua model pelarangan terkait adalah penghapusan sementara.
$ user -> isBanned ();
$ user -> isNotBanned ();
app ( Cog Contracts Ban BanService::class)-> deleteExpiredBans ();
$ ban = $ user -> ban ();
$ ban -> isPermanent (); // true
Atau berikan nilai 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 ();
Untuk menerapkan cakupan kueri sepanjang waktu, Anda dapat mendefinisikan metode shouldApplyBannedAtScope
dalam model yang dapat dilarang. Jika metode mengembalikan true
semua model yang dilarang akan disembunyikan secara default.
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 ;
}
}
Jika entitas dilarang, acara CogLaravelBanEventsModelWasBanned
diaktifkan.
Apakah entitas tidak diblokir, acara CogLaravelBanEventsModelWasUnbanned
diaktifkan.
Paket ini memiliki middleware rute yang dirancang untuk mencegah pengguna yang dilarang masuk ke rute yang dilindungi.
Untuk menggunakannya, tentukan middleware baru dalam array $routeMiddleware
dari file app/Http/Kernel.php
:
protected $ routeMiddleware = [
' forbid-banned-user ' => Cog Laravel Ban Http Middleware ForbidBannedUser::class,
]
Kemudian gunakan di rute dan grup rute mana pun yang perlu Anda lindungi:
Route:: get ( ' / ' , [
' uses ' => ' UsersController@profile ' ,
' middleware ' => ' forbid-banned-user ' ,
]);
Jika Anda ingin memaksa logout pengguna yang dilarang pada akses rute yang dilindungi, gunakan middleware LogsOutBannedUser
sebagai gantinya:
protected $ routeMiddleware = [
' logs-out-banned-user ' => Cog Laravel Ban Http Middleware LogsOutBannedUser::class,
]
Setelah Anda melakukan instalasi dasar, Anda dapat mulai menggunakan perintah ban:delete-expired
. Dalam kebanyakan kasus, Anda ingin menjadwalkan perintah ini sehingga Anda tidak perlu menjalankannya secara manual setiap kali Anda perlu menghapus larangan yang sudah kadaluwarsa dan membatalkan larangan model.
Perintah tersebut dapat dijadwalkan di kernel konsol Laravel, sama seperti perintah lainnya.
// app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' ban:delete-expired ' )-> everyMinute ();
}
Tentu saja waktu yang digunakan pada kode di atas hanyalah contoh saja. Sesuaikan dengan preferensi Anda sendiri.
Silakan lihat CHANGELOG untuk informasi lebih lanjut tentang apa yang berubah baru-baru ini.
Silakan lihat PENINGKATAN untuk petunjuk peningkatan terperinci.
Silakan lihat KONTRIBUSI untuk rinciannya.
Jalankan tes dengan:
vendor/bin/phpunit
Jika Anda menemukan masalah apa pun terkait keamanan, silakan kirim email ke [email protected] alih-alih menggunakan pelacak masalah.
Anton Komarev | badr aldeen shek salim | Rick Mac Gillis | AnselC | Joe Pemanah |
---|---|---|---|---|
Fransisco Solis | Jakub Adamec | Ilia Lazarev | Ksatria Zeo |
Daftar kontributor Larangan Laravel
Laravel Ban
adalah perangkat lunak sumber terbuka yang dilisensikan di bawah Lisensi MIT oleh Anton Komarev.Fat Boss In Jail
dilisensikan di bawah Creative Commons 3.0 oleh Gan Khoon Lay. CyberCog adalah Kesatuan Sosial para peminat. Meneliti solusi terbaik dalam pengembangan produk & perangkat lunak adalah semangat kami.