yomafleet/laravel-feature-flag

基于Unleash的内部功能标志工具

v1.0.7 2024-05-01 16:25 UTC

This package is not auto-updated.

Last update: 2024-09-18 18:17:42 UTC


README

Unleash & Flipt 的内部功能标志客户端

配置

<?php

return [
    'default' => env('FEATURE_FLAG_CONNECTION', 'disabled-toggler'),

    'providers' => [
        'flipt' => [
            'namespace' => env('FLIPT_NAMESPACE', 'default'),
            'host' => env('FLIPT_HOST'),
            'token' => env('FLIPT_TOKEN'),
        ],
        'unleash' => [
            'name' => env('UNLEASH_NAME', 'default'),
            'url' => env('UNLEASH_URL'),
            'id' => env('UNLEASH_ID'),
            'token' => env('UNLEASH_TOKEN'),
        ],
        'disabled-toggler' => [
            'optimistic' => env('DISABLED_TOGGLER_OPTIMISTIC', true)
        ]
    ],

    'disable' => env('FEATURE_FLAG_DISABLE', false),
];

环境

# Feature Flag
FEATURE_FLAG_CONNECTION=unleash
FEATURE_FLAG_DISABLE=false

# Unleash Client
UNLEASH_NAME=default
UNLEASH_URL=https://:4242/api/
UNLEASH_ID=EXAMPLE_ID
UNLEASH_TOKEN=EXAMPLE_TOKEN

# Disabled Toggler Client
DISABLED_TOGGLER_OPTIMISTIC=true

# Flipt Client
FLIPT_NAMESPACE=default
FLIPT_HOST=https://:8080
FLIPT_TOKEN=

安装

composer require yomafleet/payment-provider

使用方法

在User模型中实现UserContract接口

<?php

namespace App\Models;

use Yomafleet\FeatureFlag\UserContract;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements UserContract
{
    /**
     * Get ID of the user.
     *
     * @return string|integer
     */
    public function id(): string|int
    {
        return $this->id;
    }

    /**
     * Get all roles of the user.
     *
     * @return array
     */
    public function roles(): array
    {
        return $this->roles->toArray();
    }

    /**
     * Check if the user has given role.
     *
     * @param string $name
     * @return boolean
     */
    public function hasRole(string $name): bool
    {
        return $this->hasRole($name);
    }
}

并使用外观类检查功能标志

<?php

use Yomafleet\FeatureFlag\Facade as Flag;

//...
//...
//...
$isEnabled = Flag::enabled('someflag-check');

也可以使用blade指令

<?php

@feature('something')
    <div>Something</div>
@else
    <div>Nothing</div>
@endfeature

同样,也可以在路由中使用

<?php

use Illuminate\Support\Facades\Route;

Route::get('example', [\Example\Controller::class, 'index'])->feature('something:admin')