Laravel Ban simplifica la gestión de la prohibición del modelo Eloquent. ¡Haz que cualquier modelo sea bannable en cuestión de minutos!
El caso de uso no se limita al modelo Usuario, cualquier modelo Eloquent podría ser prohibido: Organizaciones, Equipos, Grupos y otros.
BanService
.User
; cualquier modelo de Eloquent podría prohibirse.ban
y unban
de modelos.Primero, introduzca el paquete a través de Composer:
composer require cybercog/laravel-ban
El paquete se registrará automáticamente. Este paso es necesario solo para Laravel 5.4 o versiones anteriores.
Incluya el proveedor de servicios dentro app/config/app.php
:
' providers ' => [
Cog Laravel Ban Providers BanServiceProvider::class,
],
Por último, necesitas publicar y ejecutar migraciones de bases de datos:
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;
}
El modelo prohibible debe tener una columna nullable timestamp
denominada banned_at
. Este valor se utiliza como indicador y simplifica las comprobaciones si el usuario fue prohibido. Si está intentando hacer que el modelo de usuario predeterminado de Laravel sea baneable, puede usar el ejemplo a continuación.
php artisan make:migration add_banned_at_column_to_users_table
Luego inserte el siguiente código en el archivo de migración:
<?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 ' ,
]);
El atributo expired_at
podría ser una instancia CarbonCarbon
o cualquier cadena que pueda analizarse mediante el método CarbonCarbon::parse($string)
:
$ user -> ban ([
' expired_at ' => ' +1 month ' ,
]);
$ user -> unban ();
Al unban
todos los modelos de prohibición relacionados son eliminaciones temporales.
$ user -> isBanned ();
$ user -> isNotBanned ();
app ( Cog Contracts Ban BanService::class)-> deleteExpiredBans ();
$ ban = $ user -> ban ();
$ ban -> isPermanent (); // true
O pasar valor 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 ();
Para aplicar alcances de consulta todo el tiempo, puede definir el método shouldApplyBannedAtScope
en el modelo bannable. Si el método devuelve true
todos los modelos prohibidos se ocultarán de forma predeterminada.
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 la entidad está prohibida, se activa el evento CogLaravelBanEventsModelWasBanned
.
Se activa el evento CogLaravelBanEventsModelWasUnbanned
de la entidad no prohibida.
Este paquete tiene middleware de ruta diseñado para evitar que los usuarios prohibidos accedan a rutas protegidas.
Para usarlo, defina un nuevo middleware en la matriz $routeMiddleware
del archivo app/Http/Kernel.php
:
protected $ routeMiddleware = [
' forbid-banned-user ' => Cog Laravel Ban Http Middleware ForbidBannedUser::class,
]
Luego utilícelo en cualquier ruta y grupo de rutas que necesite proteger:
Route:: get ( ' / ' , [
' uses ' => ' UsersController@profile ' ,
' middleware ' => ' forbid-banned-user ' ,
]);
Si desea forzar el cierre de sesión de un usuario prohibido en el acceso a rutas protegidas, utilice el middleware LogsOutBannedUser
en su lugar:
protected $ routeMiddleware = [
' logs-out-banned-user ' => Cog Laravel Ban Http Middleware LogsOutBannedUser::class,
]
Después de haber realizado la instalación básica, puede comenzar a usar el comando ban:delete-expired
. En la mayoría de los casos, querrás programar estos comandos para no tener que ejecutarlos manualmente cada vez que necesites eliminar prohibiciones vencidas y desbancar modelos.
El comando se puede programar en el kernel de la consola de Laravel, como cualquier otro comando.
// app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' ban:delete-expired ' )-> everyMinute ();
}
Por supuesto, el tiempo utilizado en el código anterior es sólo un ejemplo. Ajústelo para adaptarlo a sus propias preferencias.
Consulte CHANGELOG para obtener más información sobre los cambios recientes.
Consulte ACTUALIZACIÓN para obtener instrucciones detalladas de actualización.
Consulte CONTRIBUCIÓN para obtener más detalles.
Ejecute las pruebas con:
vendor/bin/phpunit
Si descubre algún problema relacionado con la seguridad, envíe un correo electrónico a [email protected] en lugar de utilizar el rastreador de problemas.
antón komarev | badr aldeen shek salim | Rick Mac Gillis | AnsellC | Joe Arquero |
---|---|---|---|---|
Francisco Solís | Jakub Adamec | Ilia Lazarev | ZeoCaballero |
Lista de contribuyentes de Laravel Ban
Laravel Ban
es un software de código abierto con licencia MIT de Anton Komarev.Fat Boss In Jail
con licencia Creative Commons 3.0 de Gan Khoon Lay. CyberCog es una unidad social de entusiastas. Investigar las mejores soluciones en desarrollo de productos y software es nuestra pasión.