Laravel Ban simplifie la gestion du bannissement du modèle Eloquent. Rendez n'importe quel modèle banni en quelques minutes !
Le cas d'utilisation ne se limite pas au modèle Utilisateur, tout modèle Eloquent pourrait être banni : Organisations, Équipes, Groupes et autres.
BanService
.User
, tout modèle Eloquent pourrait être banni.ban
et unban
des modèles.Tout d’abord, récupérez le package via Composer :
composer require cybercog/laravel-ban
Le package s’enregistrera automatiquement. Cette étape est requise pour Laravel 5.4 ou les versions antérieures uniquement.
Incluez le fournisseur de services dans app/config/app.php
:
' providers ' => [
Cog Laravel Ban Providers BanServiceProvider::class,
],
Enfin, vous devez publier et exécuter des migrations de bases de données :
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;
}
Le modèle bannable doit avoir une colonne nullable timestamp
nommée banned_at
. Cette valeur est utilisée comme indicateur et simplifie les vérifications si l'utilisateur a été banni. Si vous essayez de rendre le modèle utilisateur Laravel par défaut bannable, vous pouvez utiliser l'exemple ci-dessous.
php artisan make:migration add_banned_at_column_to_users_table
Insérez ensuite le code suivant dans le fichier de migration :
<?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 ' ,
]);
L'attribut expired_at
peut être une instance CarbonCarbon
ou n'importe quelle chaîne qui pourrait être analysée par la méthode CarbonCarbon::parse($string)
:
$ user -> ban ([
' expired_at ' => ' +1 month ' ,
]);
$ user -> unban ();
Lors de unban
tous les modèles de bannissement associés sont des suppressions logicielles.
$ user -> isBanned ();
$ user -> isNotBanned ();
app ( Cog Contracts Ban BanService::class)-> deleteExpiredBans ();
$ ban = $ user -> ban ();
$ ban -> isPermanent (); // true
Ou transmettez une valeur 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 ();
Pour appliquer des étendues de requête à tout moment, vous pouvez définir la méthode shouldApplyBannedAtScope
dans le modèle bannable. Si la méthode renvoie true
tous les modèles interdits seront masqués par défaut.
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 ;
}
}
Si l'entité est interdite, l'événement CogLaravelBanEventsModelWasBanned
est déclenché.
L'entité n'est-elle pas bannie ? L'événement CogLaravelBanEventsModelWasUnbanned
est déclenché.
Ce package dispose d'un middleware de route conçu pour empêcher les utilisateurs interdits d'accéder à des routes protégées.
Pour l'utiliser, définissez un nouveau middleware dans le tableau $routeMiddleware
du fichier app/Http/Kernel.php
:
protected $ routeMiddleware = [
' forbid-banned-user ' => Cog Laravel Ban Http Middleware ForbidBannedUser::class,
]
Utilisez-le ensuite dans toutes les routes et groupes de routes que vous devez protéger :
Route:: get ( ' / ' , [
' uses ' => ' UsersController@profile ' ,
' middleware ' => ' forbid-banned-user ' ,
]);
Si vous souhaitez forcer la déconnexion d'un utilisateur interdit sur les routes protégées, utilisez plutôt le middleware LogsOutBannedUser
:
protected $ routeMiddleware = [
' logs-out-banned-user ' => Cog Laravel Ban Http Middleware LogsOutBannedUser::class,
]
Après avoir effectué l'installation de base, vous pouvez commencer à utiliser la commande ban:delete-expired
. Dans la plupart des cas, vous souhaiterez planifier ces commandes afin de ne pas avoir à l'exécuter manuellement à chaque fois que vous devez supprimer des bannissements expirés et débannir des modèles.
La commande peut être planifiée dans le noyau de la console de Laravel, comme n'importe quelle autre commande.
// app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' ban:delete-expired ' )-> everyMinute ();
}
Bien entendu, le temps utilisé dans le code ci-dessus n’est qu’un exemple. Ajustez-le selon vos propres préférences.
Veuillez consulter CHANGELOG pour plus d'informations sur ce qui a changé récemment.
Veuillez consulter MISE À NIVEAU pour des instructions détaillées de mise à niveau.
Veuillez consulter CONTRIBUER pour plus de détails.
Exécutez les tests avec :
vendor/bin/phpunit
Si vous découvrez des problèmes liés à la sécurité, veuillez envoyer un e-mail à [email protected] au lieu d'utiliser le suivi des problèmes.
Anton Komarev | Badr Aldine Shek Salim | Rick MacGillis | AnsellC | Joe Archer |
---|---|---|---|---|
Francisco Solís | Jakub Adamec | Ilia Lazarev | ZeoKnight |
Liste des contributeurs de Laravel Ban
Laravel Ban
est un logiciel open source sous licence MIT par Anton Komarev.Fat Boss In Jail
sous licence Creative Commons 3.0 par Gan Khoon Lay. CyberCog est une Unité Sociale de passionnés. Rechercher les meilleures solutions en matière de développement de produits et de logiciels est notre passion.