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 должна иметь столбец nullable timestamp
с именем banned_at
. Это значение используется в качестве флага и упрощает проверку того, был ли пользователь забанен. Если вы пытаетесь запретить модель пользователя 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
запускается событие.
В этом пакете имеется промежуточное программное обеспечение для маршрутов, предназначенное для предотвращения перехода запрещенных пользователей на защищенные маршруты.
Чтобы использовать его, определите новое промежуточное ПО в массиве $routeMiddleware
файла app/Http/Kernel.php
:
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] вместо использования системы отслеживания проблем.
Антон Комарев | Бадр Алдин Шек Салим | Рик Мак Гиллис | АнселлС | Джо Арчер |
---|---|---|---|---|
Франсиско Солис | Якуб Адамец | Илья Лазарев | ЗеоНайт |
Список участников Laravel Ban
Laravel Ban
— это программное обеспечение с открытым исходным кодом, лицензированное Антоном Комаревым по лицензии MIT.Fat Boss In Jail
предоставлено Ганом Кхуном Лэем по лицензии Creative Commons 3.0. CyberCog — это Социальное Объединение энтузиастов. Находить лучшие решения в области разработки продуктов и программного обеспечения — наша страсть.