charlgottschalk / feature-toggle
提供创建和管理功能开关的简单实现
Requires
- php: ^7.3|^8.0
- guzzlehttp/guzzle: >=7.0.1
- laravel/framework: >=7.0
README
功能开关是一种与源代码控制结合使用的编码策略,用于简化持续集成和部署。开关的基本思想是,如果某个功能被禁用,则阻止代码部分执行。
* 这是一项正在进行中的工作,但目前稳定且可用
LFT提供了一个用于实现功能开关的简单包,允许您通过简单的GUI或Artisan命令开关功能。
哦,它还支持用户角色,您的用户角色。
安装
1. 使用composer安装包
$ composer require charlgottschalk\feature-toggle
该包应被Laravel自动发现,但如果不是,只需将服务提供者添加到您的config/app.php提供者数组中
'providers' => [ //... CharlGottschalk\FeatureToggle\FeatureToggleServiceProvider::class, ],
2. 发布资源
配置
$ php artisan vendor:publish --provider="CharlGottschalk\FeatureToggle\FeatureToggleServiceProvider" --tag="config"
资源
$ php artisan vendor:publish --provider="CharlGottschalk\FeatureToggle\FeatureToggleServiceProvider" --tag="assets"
视图: 除非您想修改GUI,否则这并非必需
$ php artisan vendor:publish --provider="CharlGottschalk\FeatureToggle\FeatureToggleServiceProvider" --tag="views"
3. 迁移
运行$ php artisan migrate以创建功能开关表。
用法
LFT提供了一些易于使用的blade指令、辅助函数和中间件来决定功能是否启用。
此外,还有一个GUI用于管理您的功能,可通过http://domain.local/features访问 - 见前缀
Blade
检查功能是否启用 - 不检查角色
@enabled('feature_name')
<p>This feature is enabled</p>
@endenabled
检查功能是否启用,包括认证用户是否通过角色拥有权限
@enabledFor('feature_name')
<p>This feature is enabled</p>
@endenabledFor
LFT在确定用户是否有权访问功能时,会尝试通过属性和角色配置(见配置)检索用户的角色。
门面
LFT提供门面,方便在控制器等地方检查功能开关。
use CharlGottschalk\FeatureToggle\Facades\Feature; if (Feature::enabled('feature_name')) { // Feature is enabled } if (Feature::enabledFor('feature_name')) { // Feature is enabled and user has permission }
辅助函数
LFT提供用于检查功能开关的辅助函数。
if (feature_enabled('feature_name')) { // Feature is enabled } if (enabled_for('feature_name')) { // Feature is enabled and user has permission }
中间件
LFT提供中间件,如果功能被禁用或用户没有权限,则禁用路由。
将中间件添加到您的app\Http\Kernel.php的$routeMiddleware数组中。
protected $routeMiddleware = [ // Other middleware 'feature' => \CharlGottschalk\FeatureToggle\Http\Middleware\CheckFeature::class, 'feature.role' => \CharlGottschalk\FeatureToggle\Http\Middleware\CheckFeatureRole::class, ];
将中间件添加到您的必需路由中。
Route::get('/some-url', [App\Http\Controllers\SomeController::class, 'index'])->middleware('feature:can_see_feature'); Route::get('/another-url', [App\Http\Controllers\AnotherRoleController::class, 'index'])->middleware('feature.role:can_see_feature_role');
如果给定的功能被禁用或用户没有权限,中间件将abort(404)。
配置
'on' => true:
关闭LFT(false)或开启LFT(true) - 当关闭时,LFT不会从数据库中检索功能状态。
'all_on' => true:
如果LFT被关闭,这将确定检查是否对所有功能返回'启用'('all_on' => true)或'禁用'('all_on' => false)。
'connection' => env('DB_CONNECTION', 'mysql'):
指定用于LFT迁移和模型的数据库连接 - 如果您希望功能开关存在于您的应用程序数据库之外,这将很有用。
'roles.property' => 'role':
LFT使用此属性来决定在用户模型上使用哪个属性来检索用户的角色。
'roles.model' => \App\Models\Role::class:
指定表示您应用程序中角色的模型。
'roles.column' => 'name':
指定在角色模型/表中代表角色名称的列。
'auth.role' => 'developer':
指定用户应具有哪种角色才能访问功能开关GUI。
'route.middleware' => ['auth']:
指定用于功能开关GUI路由的中间件。
'route.prefix' => 'features'
指定用于功能切换GUI路由的前缀 - 在这种情况下,GUI将在http://domain.local/features处可访问。
命令
添加功能切换
$php artisan feature:add feature_name
移除功能切换
$php artisan feature:remove feature_name
启用功能切换
$php artisan feature:enable feature_name
禁用功能切换
$php artisan feature:disable feature_name
切换功能切换的状态
$php artisan feature:toggle feature_name
将角色附加到功能切换
$php artisan feature:add:role feature_name role_name
从功能切换中移除角色
$php artisan feature:remove:role feature_name role_name
待办事项
- 验证规则
- 调度检查
- API支持
- Lumen支持
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。