charlgottschalk/feature-toggle

提供创建和管理功能开关的简单实现

v2.1.0 2021-08-18 16:22 UTC

This package is auto-updated.

Last update: 2024-09-18 22:36:09 UTC


README

Latest Version on Packagist Total Downloads

功能开关是一种与源代码控制结合使用的编码策略,用于简化持续集成和部署。开关的基本思想是,如果某个功能被禁用,则阻止代码部分执行。

* 这是一项正在进行中的工作,但目前稳定且可用

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)。请参阅许可证文件以获取更多信息。