
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-banEl 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_tableLuego 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/phpunitSi 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.