
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 — это Социальное Объединение энтузиастов. Находить лучшие решения в области разработки продуктов и программного обеспечения — наша страсть.