jeremykenedy / laravel-blocker
Requires
- php: ^7.3|^8.0|^8.1|^8.2
- eklundkristoffer/seedster: ^7.0
- laravelcollective/html: ^6.4
This package is auto-updated.
Last update: 2024-08-30 01:49:37 UTC
README
Laravel Blocker
Laravel Blocker (LaravelBlocker) 是一个中间件接口,用于阻止用户、电子邮件、IP地址、域名、城市、州、国家、洲和地区使用您的应用程序、登录或注册。要阻止的项目类型可以通过种子扩展到您认为合适的任何类型。您正在阻止的项目具有CRUD接口以及软删除接口。
目录
可以与以下角色包一起或单独使用
- jeremykenedy/laravel-roles
- spatie/laravel-permission
- Zizaco/entrust
- romanbican/roles
- ultraware/roles
特性
要求
所需包
(包含在此包中)
安装说明
-
在项目的根目录中,在终端运行
Laravel 5.8+ 使用
composer require jeremykenedy/laravel-blocker
Laravel 5.7 及以下使用
composer require jeremykenedy/laravel-blocker:v1.0.6
-
注册包
-
Laravel 5.5 及以上版本使用包自动发现功能,无需编辑
config/app.php
文件。 -
Laravel 5.4 及以下版本,请在
config/app.php
中的providers
下通过以下方式注册包
'providers' => [ Collective\Html\HtmlServiceProvider::class, jeremykenedy\LaravelBlocker\LaravelBlockerServiceProvider::class, ];
在 config/app.php
中的 aliases
部分,使用以下方式
'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class,
- 通过在项目的根目录中运行以下命令来发布包的视图、配置文件、资产和语言文件
发布所有资产
php artisan vendor:publish --provider="jeremykenedy\LaravelBlocker\LaravelBlockerServiceProvider"
发布特定资产
php artisan vendor:publish --tag=laravelblocker-config php artisan vendor:publish --tag=laravelblocker-views php artisan vendor:publish --tag=laravelblocker-lang php artisan vendor:publish --tag=laravelblocker-migrations php artisan vendor:publish --tag=laravelblocker-seeds
使用方法
从路由文件中
- 您可以在路由组或单个路由中包含
checkblocked
。
路由组示例
Route::group(['middleware' => ['web', 'checkblocked']], function () { Route::get('/', 'WelcomeController@welcome'); });
单个路由示例
Route::get('/', 'WelcomeController@welcome')->middleware('checkblocked'); Route::match(['post'], '/test', 'Testing\TestingController@runTest')->middleware('checkblocked');
从控制器文件中
- 您可以在控制器文件的构造函数中包含
checkblocked
。
控制器文件示例
/** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('checkblocked'); }
配置
有许多可配置的选项,都已扩展为可以通过 .env
文件变量进行配置。因此,无需直接编辑配置文件。
- 查看配置文件:[laravelblocker.php](https://github.com/jeremykenedy/LaravelBlocker/blob/development/src/config/laravelblocker.php)
- 查看默认类型种子:[DefaultBlockedTypeTableSeeder.php](https://github.com/jeremykenedy/LaravelBlocker/blob/development/src/database/seeds/DefaultBlockedTypeTableSeeder.php)
- 查看默认阻止项种子:[DefaultBlockedItemsTableSeeder.php](https://github.com/jeremykenedy/LaravelBlocker/blob/development/src/database/seeds/DefaultBlockedItemsTableSeeder.php)
<?php return [ /* |-------------------------------------------------------------------------- | Laravel Blocker Core Setting |-------------------------------------------------------------------------- */ 'laravelBlockerEnabled' => env('LARAVEL_BLOCKER_ENABLED', true), /* |-------------------------------------------------------------------------- | Laravel Blocker Database Settings |-------------------------------------------------------------------------- */ 'blockerDatabaseConnection' => env('LARAVEL_BLOCKER_DATABASE_CONNECTION', 'mysql'), 'blockerDatabaseTable' => env('LARAVEL_BLOCKER_DATABASE_TABLE', 'laravel_blocker'), 'blockerTypeDatabaseTable' => env('LARAVEL_BLOCKER_TYPE_DATABASE_TABLE', 'laravel_blocker_types'), 'seedDefaultBlockedTypes' => env('LARAVEL_BLOCKER_SEED_DEFAULT_TYPES', true), 'seedDefaultBlockedItems' => env('LARAVEL_BLOCKER_SEED_DEFAULT_ITEMS', true), 'seedPublishedBlockedTypes' => env('LARAVEL_BLOCKER_TYPES_SEED_PUBLISHED', true), 'seedPublishedBlockedItems' => env('LARAVEL_BLOCKER_ITEMS_SEED_PUBLISHED', true), 'useSeededBlockedTypes' => env('LARAVEL_BLOCKER_USE_TYPES_SEED_PUBLISHED', false), 'useSeededBlockedItems' => env('LARAVEL_BLOCKER_USE_ITEMS_SEED_PUBLISHED', false), /* |-------------------------------------------------------------------------- | Laravel Default User Model |-------------------------------------------------------------------------- */ 'defaultUserModel' => env('LARAVEL_BLOCKER_USER_MODEL', 'App\User'), /* |-------------------------------------------------------------------------- | Laravel Blocker Front End Settings |-------------------------------------------------------------------------- */ // The parent blade file 'laravelBlockerBladeExtended' => env('LARAVEL_BLOCKER_BLADE_EXTENDED', 'layouts.app'), // Titles placement extend 'laravelBlockerTitleExtended' => env('LARAVEL_BLOCKER_TITLE_EXTENDED', 'template_title'), // Switch Between bootstrap 3 `panel` and bootstrap 4 `card` classes 'blockerBootstapVersion' => env('LARAVEL_BLOCKER_BOOTSTRAP_VERSION', '4'), // Additional Card classes for styling - // See: https://bootstrap.ac.cn/docs/4.0/components/card/#background-and-color // Example classes: 'text-white bg-primary mb-3' 'blockerBootstrapCardClasses' => env('LARAVEL_BLOCKER_CARD_CLASSES', ''), // Blade Extension Placement 'blockerBladePlacement' => env('LARAVEL_BLOCKER_BLADE_PLACEMENT', 'yield'), 'blockerBladePlacementCss' => env('LARAVEL_BLOCKER_BLADE_PLACEMENT_CSS', 'inline_template_linked_css'), 'blockerBladePlacementJs' => env('LARAVEL_BLOCKER_BLADE_PLACEMENT_JS', 'inline_footer_scripts'), // jQuery 'enablejQueryCDN' => env('LARAVEL_BLOCKER_JQUERY_CDN_ENABLED', true), 'JQueryCDN' => env('LARAVEL_BLOCKER_JQUERY_CDN_URL', 'https://code.jqueryjs.cn/jquery-3.3.1.min.js'), // Font Awesome 'blockerEnableFontAwesomeCDN' => env('LARAVEL_BLOCKER_FONT_AWESOME_CDN_ENABLED', true), 'blockerFontAwesomeCDN' => env('LARAVEL_BLOCKER_FONT_AWESOME_CDN_URL', 'https://maxcdn.bootstrap.ac.cn/font-awesome/4.7.0/css/font-awesome.min.css'), // Bootstrap Tooltips 'tooltipsEnabled' => env('LARAVEL_BLOCKER_TOOLTIPS_ENABLED', true), // jQuery IP Mask 'jQueryIpMaskEnabled' => env('LARAVEL_BLOCKER_JQUERY_IP_MASK_ENABLED', true), 'jQueryIpMaskCDN' => env('LARAVEL_BLOCKER_JQUERY_IP_MASK_CDN', 'https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.10/jquery.mask.js'), // Flash Messaging 'blockerFlashMessagesEnabled' => env('LARAVEL_BLOCKER_FLASH_MESSAGES_ENABLED', true), // Enable Search Blocked - Uses jQuery Ajax 'enableSearchBlocked' => env('LARAVEL_BLOCKER_SEARCH_ENABLED', true), /* |-------------------------------------------------------------------------- | Laravel Blocker Auth & Roles Settings |-------------------------------------------------------------------------- */ // Enable `auth` middleware 'authEnabled' => env('LARAVEL_BLOCKER_AUTH_ENABLED', true), // Enable Optional Roles Middleware 'rolesEnabled' => env('LARAVEL_BLOCKER_ROLES_ENABLED', false), // Optional Roles Middleware 'rolesMiddlware' => env('LARAVEL_BLOCKER_ROLES_MIDDLWARE', 'role:admin'), /* |-------------------------------------------------------------------------- | Laravel Blocker Pagination Settings |-------------------------------------------------------------------------- */ 'blockerPaginationEnabled' => env('LARAVEL_BLOCKER_PAGINATION_ENABLED', false), 'blockerPaginationPerPage' => env('LARAVEL_BLOCKER_PAGINATION_PER_PAGE', 25), /* |-------------------------------------------------------------------------- | Laravel Blocker Databales Settings - Not recommended with pagination. |-------------------------------------------------------------------------- */ 'blockerDatatables' => env('LARAVEL_BLOCKER_DATATABLES_ENABLED', false), 'enabledDatatablesJs' => env('LARAVEL_BLOCKER_DATATABLES_JS_ENABLED', false), 'datatablesJsStartCount' => env('LARAVEL_BLOCKER_DATATABLES_JS_START_COUNT', 25), 'datatablesCssCDN' => env('LARAVEL_BLOCKER_DATATABLES_CSS_CDN', 'https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap4.min.css'), 'datatablesJsCDN' => env('LARAVEL_BLOCKER_DATATABLES_JS_CDN', 'https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js'), 'datatablesJsPresetCDN' => env('LARAVEL_BLOCKER_DATATABLES_JS_PRESET_CDN', 'https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js'), /* |-------------------------------------------------------------------------- | Laravel Blocker Actions Options |-------------------------------------------------------------------------- */ 'blockerDefaultAction' => env('LARAVEL_BLOCKER_DEFAULT_ACTION', 'abort'), //'abort', 'view' ,'redirect' 'blockerDefaultActionAbortType' => env('LARAVEL_BLOCKER_DEFAULT_ACTION_ABORT_TYPE', '403'), 'blockerDefaultActionView' => env('LARAVEL_BLOCKER_DEFAULT_ACTION_VIEW', 'welcome'), 'blockerDefaultActionRedirect' => env('LARAVEL_BLOCKER_DEFAULT_ACTION_REDIRECT', '/'), // Internal or external ];
测试、Faker 和此包
此包非常适合阻止应用程序中的不受欢迎的内容,但您的配置可能与 Laravel Factories 中自动生成的内容冲突。一个常见的例子是,当应用程序被设置为阻止匹配 @example.com 的电子邮件地址时,这是 $faker->safeEmail
生成的最常见的电子邮件地址 TLD 之一。
为了避免此包在自动生成的模型上抛出不准确的失败,请确保在 phpunit.xml
配置文件中禁用此包
<?xml version="1.0" encoding="UTF-8"?> <phpunit> ... <php> ... <env name="LARAVEL_BLOCKER_ENABLED" value="false" /> ... </php> </phpunit>
环境文件
# Laravel Blocker Core Setting
LARAVEL_BLOCKER_ENABLED=true
# Laravel Blocker Database Settings
LARAVEL_BLOCKER_DATABASE_CONNECTION='mysql'
LARAVEL_BLOCKER_DATABASE_TABLE='laravel_blocker'
LARAVEL_BLOCKER_TYPE_DATABASE_TABLE='laravel_blocker_types'
LARAVEL_BLOCKER_SEED_DEFAULT_TYPES=true
LARAVEL_BLOCKER_SEED_DEFAULT_ITEMS=true
LARAVEL_BLOCKER_TYPES_SEED_PUBLISHED=true
LARAVEL_BLOCKER_ITEMS_SEED_PUBLISHED=true
LARAVEL_BLOCKER_USE_TYPES_SEED_PUBLISHED=false
LARAVEL_BLOCKER_USE_ITEMS_SEED_PUBLISHED=false
# Laravel Default User Model
LARAVEL_BLOCKER_USER_MODEL='App\User'
# Laravel Blocker Front End Settings
LARAVEL_BLOCKER_BLADE_EXTENDED='layouts.app'
LARAVEL_BLOCKER_TITLE_EXTENDED='template_title'
LARAVEL_BLOCKER_BOOTSTRAP_VERSION='4'
LARAVEL_BLOCKER_CARD_CLASSES=''
LARAVEL_BLOCKER_BLADE_PLACEMENT='yield'
LARAVEL_BLOCKER_BLADE_PLACEMENT_CSS='template_linked_css'
LARAVEL_BLOCKER_BLADE_PLACEMENT_JS='footer_scripts'
LARAVEL_BLOCKER_JQUERY_CDN_ENABLED=true
LARAVEL_BLOCKER_JQUERY_CDN_URL='https://code.jqueryjs.cn/jquery-3.2.1.slim.min.js'
LARAVEL_BLOCKER_FONT_AWESOME_CDN_ENABLED=true
LARAVEL_BLOCKER_FONT_AWESOME_CDN_URL='https://maxcdn.bootstrap.ac.cn/font-awesome/4.7.0/css/font-awesome.min.css'
LARAVEL_BLOCKER_TOOLTIPS_ENABLED=true
LARAVEL_BLOCKER_JQUERY_IP_MASK_ENABLED=true
LARAVEL_BLOCKER_JQUERY_IP_MASK_CDN='https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.10/jquery.mask.js'
LARAVEL_BLOCKER_FLASH_MESSAGES_ENABLED=true
LARAVEL_BLOCKER_SEARCH_ENABLED=true
# Laravel Blocker Auth & Roles Settings
LARAVEL_BLOCKER_AUTH_ENABLED=true
LARAVEL_BLOCKER_ROLES_ENABLED=false
LARAVEL_BLOCKER_ROLES_MIDDLWARE='role:admin'
# Laravel Blocker Pagination Settings
LARAVEL_BLOCKER_PAGINATION_ENABLED=false
LARAVEL_BLOCKER_PAGINATION_PER_PAGE=25
# Laravel Blocker Databales Settings - Not recommended with pagination.
LARAVEL_BLOCKER_DATATABLES_ENABLED=false
LARAVEL_BLOCKER_DATATABLES_JS_ENABLED=false
LARAVEL_BLOCKER_DATATABLES_JS_START_COUNT=25
LARAVEL_BLOCKER_DATATABLES_CSS_CDN='https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap4.min.css'
LARAVEL_BLOCKER_DATATABLES_JS_CDN='https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js'
LARAVEL_BLOCKER_DATATABLES_JS_PRESET_CDN='https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js'
# Laravel Blocker Actions Options
LARAVEL_BLOCKER_DEFAULT_ACTION='abort'
LARAVEL_BLOCKER_DEFAULT_ACTION_ABORT_TYPE='403'
LARAVEL_BLOCKER_DEFAULT_ACTION_VIEW='welcome'
LARAVEL_BLOCKER_DEFAULT_ACTION_REDIRECT='/'
路由
/blocker
/blocker/{id}
/blocker/create
/blocker/{id}/edit
/blocker-deleted
/blocker-deleted/{id}
/blocker-deleted/{id}
深入解析路由
+--------+----------------------------------------+---------------------------------------+---------------------------------------------+---------------------------------------------------------------------------------------------------------+--------------------------------------------------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------------------------------------+---------------------------------------+---------------------------------------------+---------------------------------------------------------------------------------------------------------+--------------------------------------------------------------+
| | GET|HEAD | blocker | laravelblocker::blocker.index | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerController@index | web,checkblocked,auth |
| | POST | blocker | laravelblocker::blocker.store | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerController@store | web,checkblocked,auth |
| | GET|HEAD | blocker-deleted | laravelblocker::blocker-deleted | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerDeletedController@index | web,checkblocked,auth |
| | DELETE | blocker-deleted-destroy-all | laravelblocker::destroy-all-blocked | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerDeletedController@destroyAllItems | web,checkblocked,auth |
| | POST | blocker-deleted-restore-all | laravelblocker::blocker-deleted-restore-all | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerDeletedController@restoreAllBlockedItems | web,checkblocked,auth |
| | DELETE | blocker-deleted/{id} | laravelblocker::blocker-item-destroy | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerDeletedController@destroy | web,checkblocked,auth |
| | PUT | blocker-deleted/{id} | laravelblocker::blocker-item-restore | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerDeletedController@restoreBlockedItem | web,checkblocked,auth |
| | GET|HEAD | blocker-deleted/{id} | laravelblocker::blocker-item-show-deleted | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerDeletedController@show | web,checkblocked,auth |
| | GET|HEAD | blocker/create | laravelblocker::blocker.create | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerController@create | web,checkblocked,auth |
| | DELETE | blocker/{blocker} | laravelblocker::blocker.destroy | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerController@destroy | web,checkblocked,auth |
| | PUT|PATCH | blocker/{blocker} | laravelblocker::blocker.update | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerController@update | web,checkblocked,auth |
| | GET|HEAD | blocker/{blocker} | laravelblocker::blocker.show | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerController@show | web,checkblocked,auth |
| | GET|HEAD | blocker/{blocker}/edit | laravelblocker::blocker.edit | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerController@edit | web,checkblocked,auth |
| | POST | search-blocked | laravelblocker::search-blocked | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerController@search | web,checkblocked,auth |
| | POST | search-blocked-deleted | laravelblocker::search-blocked-deleted | jeremykenedy\LaravelBlocker\App\Http\Controllers\LaravelBlockerDeletedController@search | web,checkblocked,auth |
+--------+----------------------------------------+---------------------------------------+---------------------------------------------+---------------------------------------------------------------------------------------------------------+--------------------------------------------------------------+
截图
文件树
├── .all-contributorsrc ├── .env.travis ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── composer.json ├── phpunit.xml └── src ├── App │ ├── Http │ │ ├── Controllers │ │ │ ├── LaravelBlockerController.php │ │ │ └── LaravelBlockerDeletedController.php │ │ ├── Middleware │ │ │ └── LaravelBlocker.php │ │ └── Requests │ │ ├── SearchBlockerRequest.php │ │ ├── StoreBlockerRequest.php │ │ └── UpdateBlockerRequest.php │ ├── Models │ │ ├── BlockedItem.php │ │ └── BlockedType.php │ ├── Rules │ │ └── UniqueBlockerItemValueEmail.php │ └── Traits │ ├── IpAddressDetails.php │ └── LaravelCheckBlockedTrait.php ├── LaravelBlockerFacade.php ├── LaravelBlockerServiceProvider.php ├── config │ └── laravelblocker.php ├── database │ ├── migrations │ │ ├── 2019_02_19_032636_create_laravel_blocker_types_table.php │ │ └── 2019_02_19_045158_create_laravel_blocker_table.php │ └── seeds │ ├── DefaultBlockedItemsTableSeeder.php │ ├── DefaultBlockedTypeTableSeeder.php │ └── publish │ ├── BlockedItemsTableSeeder.php │ └── BlockedTypeTableSeeder.php ├── resources │ ├── lang │ │ └── en │ │ └── laravelblocker.php │ └── views │ ├── forms │ │ ├── create-new.blade.php │ │ ├── delete-full.blade.php │ │ ├── delete-item.blade.php │ │ ├── delete-sm.blade.php │ │ ├── destroy-all.blade.php │ │ ├── destroy-full.blade.php │ │ ├── destroy-sm.blade.php │ │ ├── edit-form.blade.php │ │ ├── partials │ │ │ ├── item-blocked-user-select.blade.php │ │ │ ├── item-note-input.blade.php │ │ │ ├── item-type-select.blade.php │ │ │ └── item-value-input.blade.php │ │ ├── restore-all.blade.php │ │ ├── restore-item.blade.php │ │ └── search-blocked.blade.php │ ├── laravelblocker │ │ ├── create.blade.php │ │ ├── deleted │ │ │ └── index.blade.php │ │ ├── edit.blade.php │ │ ├── index.blade.php │ │ └── show.blade.php │ ├── modals │ │ └── confirm-modal.blade.php │ ├── partials │ │ ├── blocked-items-table.blade.php │ │ ├── bs-visibility-css.blade.php │ │ ├── flash-messages.blade.php │ │ ├── form-status.blade.php │ │ └── styles.blade.php │ └── scripts │ ├── blocked-form.blade.php │ ├── confirm-modal.blade.php │ ├── datatables.blade.php │ ├── search-blocked.blade.php │ └── tooltips.blade.php └── routes └── web.php
- 可以使用 brew 安装 tree 命令:
brew install tree
- 使用以下命令生成的文件树:
tree -a -I '.git|node_modules|vendor|storage|tests'
许可
LaravelBlocker遵循MIT许可证[MIT许可证]。祝您享受使用!
贡献者
感谢这些出色的人们(表情符号键)
本项目遵循all-contributors规范。欢迎所有类型的贡献!