Laravel Ban vereinfacht die Verwaltung des Verbots des Eloquent-Modells. Machen Sie jedes Modell in wenigen Minuten sperrbar!
Der Anwendungsfall ist nicht auf das Benutzermodell beschränkt, jedes Eloquent-Modell könnte gesperrt werden: Organisationen, Teams, Gruppen und andere.
BanService
verwaltet.User
beschränkt, jedes Eloquent-Modell könnte gesperrt werden.ban
und unban
des Verbots von Veranstaltungen, bei denen auf Models geschossen wird.Ziehen Sie zunächst das Paket über Composer ein:
composer require cybercog/laravel-ban
Das Paket registriert sich automatisch. Dieser Schritt ist nur für Laravel 5.4 oder frühere Versionen erforderlich.
Fügen Sie den Dienstanbieter in app/config/app.php
ein:
' providers ' => [
Cog Laravel Ban Providers BanServiceProvider::class,
],
Zuletzt müssen Sie Datenbankmigrationen veröffentlichen und ausführen:
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;
}
Das verbietbare Modell muss über nullable timestamp
mit dem Namen banned_at
verfügen. Dieser Wert wird als Flag verwendet und vereinfacht die Überprüfung, ob der Benutzer gesperrt wurde. Wenn Sie versuchen, das standardmäßige Laravel-Benutzermodell sperrbar zu machen, können Sie das folgende Beispiel verwenden.
php artisan make:migration add_banned_at_column_to_users_table
Fügen Sie dann den folgenden Code in die Migrationsdatei ein:
<?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 ' ,
]);
Das Attribut „ expired_at
kann CarbonCarbon
Instanz oder eine beliebige Zeichenfolge sein, die mit der Methode CarbonCarbon::parse($string)
analysiert werden kann:
$ user -> ban ([
' expired_at ' => ' +1 month ' ,
]);
$ user -> unban ();
Beim unban
handelt es sich bei allen zugehörigen Bannmodellen um vorläufige Löschungen.
$ user -> isBanned ();
$ user -> isNotBanned ();
app ( Cog Contracts Ban BanService::class)-> deleteExpiredBans ();
$ ban = $ user -> ban ();
$ ban -> isPermanent (); // true
Oder übergeben Sie 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 ();
Um jederzeit Abfragebereiche anzuwenden, können Sie die Methode shouldApplyBannedAtScope
im bannbaren Modell definieren. Wenn die Methode true
zurückgibt, werden alle gesperrten Modelle standardmäßig ausgeblendet.
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 ;
}
}
Wenn die Entität gesperrt ist, wird das Ereignis CogLaravelBanEventsModelWasBanned
ausgelöst.
Ist die Entität nicht gesperrt, wird das Ereignis CogLaravelBanEventsModelWasUnbanned
ausgelöst.
Dieses Paket verfügt über Routen-Middleware, die verhindern soll, dass gesperrte Benutzer geschützte Routen verwenden.
Um es zu verwenden, definieren Sie neue Middleware im $routeMiddleware
-Array der Datei app/Http/Kernel.php
:
protected $ routeMiddleware = [
' forbid-banned-user ' => Cog Laravel Ban Http Middleware ForbidBannedUser::class,
]
Verwenden Sie es dann in allen Routen und Routengruppen, die Sie schützen müssen:
Route:: get ( ' / ' , [
' uses ' => ' UsersController@profile ' ,
' middleware ' => ' forbid-banned-user ' ,
]);
Wenn Sie die Abmeldung eines gesperrten Benutzers beim Zugriff auf geschützte Routen erzwingen möchten, verwenden Sie stattdessen LogsOutBannedUser
-Middleware:
protected $ routeMiddleware = [
' logs-out-banned-user ' => Cog Laravel Ban Http Middleware LogsOutBannedUser::class,
]
Nachdem Sie die Grundinstallation durchgeführt haben, können Sie mit dem Befehl ban:delete-expired
beginnen. In den meisten Fällen möchten Sie diese Befehle planen, damit Sie sie nicht jedes Mal manuell ausführen müssen, wenn Sie abgelaufene Sperren löschen und Modelle entsperren möchten.
Der Befehl kann wie jeder andere Befehl im Konsolenkernel von Laravel geplant werden.
// app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' ban:delete-expired ' )-> everyMinute ();
}
Die im obigen Code verwendete Zeit ist natürlich nur ein Beispiel. Passen Sie es an Ihre eigenen Vorlieben an.
Weitere Informationen zu den letzten Änderungen finden Sie im CHANGELOG.
Ausführliche Anweisungen zum Upgrade finden Sie unter UPGRADE.
Weitere Informationen finden Sie unter BEITRAGEN.
Führen Sie die Tests aus mit:
vendor/bin/phpunit
Wenn Sie sicherheitsrelevante Probleme entdecken, senden Sie bitte eine E-Mail an [email protected], anstatt den Issue-Tracker zu verwenden.
Anton Komarev | Badr Aldeen Shek Salim | Rick Mac Gillis | AnsellC | Joe Archer |
---|---|---|---|---|
Francisco Solis | Jakub Adamec | Ilia Lazarev | ZeoKnight |
Liste der Mitwirkenden von Laravel Ban
Laravel Ban
Paket ist eine Open-Source-Software, die unter der MIT-Lizenz von Anton Komarev lizenziert ist.Fat Boss In Jail
, lizenziert unter Creative Commons 3.0 von Gan Khoon Lay. CyberCog ist eine soziale Einheit von Enthusiasten. Die Erforschung der besten Lösungen in der Produkt- und Softwareentwicklung ist unsere Leidenschaft.