Laravel Ban は、Eloquent モデルの禁止の管理を簡素化します。あらゆるモデルを数分で禁止可能にします!
使用例はユーザー モデルに限定されず、組織、チーム、グループなど、あらゆる Eloquent モデルが禁止される可能性があります。
BanService
によって処理されます。User
モデルに限定されず、Eloquent モデルは禁止される可能性があります。ban
およびunban
で発生するイベント。まず、Composer を通じてパッケージをプルします。
composer require cybercog/laravel-ban
パッケージは自動的に登録されます。この手順は、Laravel 5.4 以前のリリースでのみ必要です。
サービスプロバイダーをapp/config/app.php
内に含めます。
' providers ' => [
Cog Laravel Ban Providers BanServiceProvider::class,
],
最後に、データベース移行を公開して実行する必要があります。
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;
}
Bannable モデルには、 banned_at
という名前のnullable timestamp
列が必要です。この値はフラグとして使用され、ユーザーが禁止されているかどうかのチェックを簡素化します。デフォルトの Laravel ユーザーモデルを禁止可能にしたい場合は、以下の例を使用できます。
php artisan make:migration add_banned_at_column_to_users_table
次に、次のコードを移行ファイルに挿入します。
<?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 ' ,
]);
expired_at
属性は、 CarbonCarbon
インスタンス、またはCarbonCarbon::parse($string)
メソッドで解析できる任意の文字列です。
$ user -> ban ([
' expired_at ' => ' +1 month ' ,
]);
$ user -> unban ();
unban
では、関連するすべての禁止モデルが論理的に削除されます。
$ user -> isBanned ();
$ user -> isNotBanned ();
app ( Cog Contracts Ban BanService::class)-> deleteExpiredBans ();
$ ban = $ user -> ban ();
$ ban -> isPermanent (); // true
または、 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 ();
クエリ スコープを常に適用するには、禁止可能モデルでshouldApplyBannedAtScope
メソッドを定義します。メソッドがtrue
を返した場合、禁止されているすべてのモデルがデフォルトで非表示になります。
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 ;
}
}
エンティティが禁止されている場合、 CogLaravelBanEventsModelWasBanned
イベントが発生します。
エンティティが禁止解除されているCogLaravelBanEventsModelWasUnbanned
イベントが発生します。
このパッケージには、禁止されたユーザーが保護されたルートに移動できないように設計されたルート ミドルウェアが含まれています。
これを使用するには、 app/Http/Kernel.php
ファイルの$routeMiddleware
配列で新しいミドルウェアを定義します。
protected $ routeMiddleware = [
' forbid-banned-user ' => Cog Laravel Ban Http Middleware ForbidBannedUser::class,
]
次に、保護する必要があるルートおよびルート グループでそれを使用します。
Route:: get ( ' / ' , [
' uses ' => ' UsersController@profile ' ,
' middleware ' => ' forbid-banned-user ' ,
]);
保護されたルートへのアクセスで禁止されたユーザーを強制的にログアウトしたい場合は、代わりにLogsOutBannedUser
ミドルウェアを使用します。
protected $ routeMiddleware = [
' logs-out-banned-user ' => Cog Laravel Ban Http Middleware LogsOutBannedUser::class,
]
基本インストールを実行した後、 ban:delete-expired
コマンドの使用を開始できます。ほとんどの場合、期限切れの禁止を削除したりモデルの禁止を解除する必要があるたびに手動で実行する必要がないように、これらのコマンドをスケジュールすることができます。
このコマンドは、他のコマンドと同様に、Laravel のコンソール カーネルでスケジュールできます。
// app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' ban:delete-expired ' )-> everyMinute ();
}
もちろん、上記のコードで使用されている時間は単なる例です。自分の好みに合わせて調整してください。
最近の変更点の詳細については、CHANGELOG を参照してください。
アップグレード手順の詳細については、「アップグレード」を参照してください。
詳細については、「貢献」を参照してください。
以下を使用してテストを実行します。
vendor/bin/phpunit
セキュリティ関連の問題を発見した場合は、問題トラッカーを使用する代わりに、[email protected] に電子メールを送信してください。
アントン・コマレフ | バドル・アルディーン・シェク・サリム | リック・マクギリス | アンセルC | ジョー・アーチャー |
---|---|---|---|---|
フランシスコ・ソリス | ヤクブ・アダメク | イリア・ラザレフ | ゼオナイト |
Laravel Ban 貢献者リスト
Laravel Ban
パッケージは、MIT ライセンスに基づいて Anton Kumarev によってライセンス供与されたオープンソース ソフトウェアです。Fat Boss In Jail
画像。 CyberCog は、愛好家のソーシャル ユニティです。製品およびソフトウェア開発における最良のソリューションを研究することが私たちの情熱です。