
Laravel Ban simplifica o gerenciamento do banimento do modelo Eloquent. Torne qualquer modelo banível em minutos!
O caso de uso não se limita ao modelo de Usuário, qualquer modelo do Eloquent pode ser banido: Organizações, Equipes, Grupos e outros.
BanService .User , qualquer modelo Eloquent pode ser banido.ban e unban .Primeiro, insira o pacote através do Composer:
composer require cybercog/laravel-banO pacote será registrado automaticamente. Esta etapa é necessária apenas para Laravel 5.4 ou versões anteriores.
Inclua o provedor de serviços em app/config/app.php :
' providers ' => [
Cog Laravel Ban Providers BanServiceProvider::class,
],Por fim, você precisa publicar e executar migrações de banco de dados:
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;
} O modelo banível deve ter uma coluna nullable timestamp denominada banned_at . Este valor é usado como sinalizador e simplifica a verificação se o usuário foi banido. Se você está tentando tornar o modelo de usuário padrão do Laravel banível, você pode usar o exemplo abaixo.
php artisan make:migration add_banned_at_column_to_users_tableEm seguida, insira o seguinte código no arquivo de migração:
<?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 ' ,
]); O atributo expired_at pode ser uma instância CarbonCarbon ou qualquer string que possa ser analisada pelo método CarbonCarbon::parse($string) :
$ user -> ban ([
' expired_at ' => ' +1 month ' ,
]); $ user -> unban (); No unban todos os modelos de banimento relacionados são exclusões suaves.
$ user -> isBanned (); $ user -> isNotBanned (); app ( Cog Contracts Ban BanService::class)-> deleteExpiredBans (); $ ban = $ user -> ban ();
$ ban -> isPermanent (); // true Ou passe o 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 escopos de consulta o tempo todo, você pode definir o método shouldApplyBannedAtScope no modelo banível. Se o método retornar true todos os modelos banidos ficarão ocultos por padrão.
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 ;
}
} Se a entidade for banida, o evento CogLaravelBanEventsModelWasBanned é disparado.
A entidade não foi banida O evento CogLaravelBanEventsModelWasUnbanned foi disparado.
Este pacote possui middleware de rota projetado para evitar que usuários banidos sigam para rotas protegidas.
Para usá-lo, defina um novo middleware na matriz $routeMiddleware do arquivo app/Http/Kernel.php :
protected $ routeMiddleware = [
' forbid-banned-user ' => Cog Laravel Ban Http Middleware ForbidBannedUser::class,
]Em seguida, use-o em quaisquer rotas e grupos de rotas que você precise proteger:
Route:: get ( ' / ' , [
' uses ' => ' UsersController@profile ' ,
' middleware ' => ' forbid-banned-user ' ,
]); Se você deseja forçar o logout do usuário banido no acesso a rotas protegidas, use o middleware LogsOutBannedUser :
protected $ routeMiddleware = [
' logs-out-banned-user ' => Cog Laravel Ban Http Middleware LogsOutBannedUser::class,
] Depois de realizar a instalação básica, você pode começar a usar o comando ban:delete-expired . Na maioria dos casos, você desejará agendar esses comandos para não precisar executá-los manualmente sempre que precisar excluir banimentos expirados e modelos de cancelamento de banimento.
O comando pode ser agendado no kernel do console do Laravel, assim como qualquer outro comando.
// app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' ban:delete-expired ' )-> everyMinute ();
}Claro, o tempo usado no código acima é apenas um exemplo. Ajuste-o de acordo com suas preferências.
Consulte CHANGELOG para obter mais informações sobre o que mudou recentemente.
Consulte ATUALIZAÇÃO para obter instruções detalhadas de atualização.
Consulte CONTRIBUINDO para obter detalhes.
Execute os testes com:
vendor/bin/phpunitSe você descobrir algum problema relacionado à segurança, envie um e-mail para [email protected] em vez de usar o rastreador de problemas.
Anton Komarev | Badr Aldeen Shek Salim | Rick Mac Gillis | AnsellC | Joe Archer |
|---|---|---|---|---|
Francisco Solís | Jakub Adamec | Ilia Lazarev | Zeo Cavaleiro |
Lista de contribuidores do Laravel Ban
Laravel Ban é um software de código aberto licenciado sob a licença MIT por Anton Komarev.Fat Boss In Jail licenciada sob Creative Commons 3.0 por Gan Khoon Lay. CyberCog é uma Unidade Social de entusiastas. Pesquisar as melhores soluções em desenvolvimento de produtos e software é a nossa paixão.