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-ban
O 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_table
Em 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/phpunit
Se 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.