This packages provides a simple to use possibility to introduce functionality (features
)
to specific users or groups of users (parties
).
This concept is also known as FeatureFlags or FeatureToggles.
You can install the package via composer:
composer require jkbennemann/laravel-features
After you have installed the package run the following command start the installation routine
#Interactive installation
php artisan feature:install
#Command if you are using uuids for your model
php artisan feature:install --uuid
#Command if you are using unsigned big integer (id)
php artisan feature:install --id
Migrate database files
php artisan migrate
Adding HasFeatures
trait to your User
model
//..
use Jkbennemann\Features\Models\Traits\HasFeatures;
class User extends Model
{
use HasFeatures;
//..
}
After these steps you're good to go.
- Add you
features
which should be tested - Create two
parties
and add users to them - Assign features to the parties or single users
- Add you
features
which should be beta-tested - Create a new
party
fpr you beta-testers - Assign the users to that party
- Add a new
feature
which should beINACTIVE
for now - Complete development and optionally create a special group for users e.g.
developers that should still be able to access that new feature - Extend that feature to beta-testers or remove feature-switch
- Create a new
party
for administrators - Assign all
features
which should be explicitly available for them to that party - Add all relevant users to that party.
use \Jkbennemann\Features\Models\Enums\FeatureStatus;
use \Jkbennemann\Features\Models\Feature;
$feature = Features::create([
'name' => 'Functionality A',
'description' => 'This is a new feature', //optional
'status' => FeatureStatus::ACTIVE //optional, defaults to INACTIVE
]);
$party = Party::create([
'name' => 'Beta Testers',
'description' => 'This is a new party', //optional
'status' => FeatureStatus::ACTIVE //optional, defaults to INACTIVE
]);
$feature->activate(); //activates a feature
$feature->deactivate(); //deactivates a feature
$party->addFeature($feature); //assigns a feature to a party
$party->removeFeature($feature); //removes a feature from a party
$active = $user->hasFeature($feature); //user has the feature which is active
$active = $user->hasFeature('feature-slug'); //you may provide the slug of a feature
$active = $user->hasFeature('feature-slug', false); //provide false ignore the check for active features
$active = $user->hasFeatureThroughParty('feature-slug'); //checks if a feature is granted through a party
$features = $user->allFeatures(); //returns all features
$features = $user->allFeatures(false); //returns all features without checking the status
$user->giveFeature('feature-slug'); //add specific feature to a user
$user->removeFeature('feature-slug'); //remove specific feature
$user->joinParty('party-slug'); //add a user to a party
$user->addToParty('party-slug'); //add a user to a party
$user->leaveParty('party-slug'); //remove a user from a party
$user->belongsToParty('party-slug'); //checks if the user belongs to the party
$user->inParty('party-slug'); //checks if the user belongs to the party
# Create a new feature/party
php artisan feature:add {name} {description?} {--status}
php artisan party:add {name} {description?} {--status}
# List features/parties
php artisan feature:list
php artisan party:list
# Activate a feature/party
php artisan feature:activate {id|slug}
php artisan party:activate {id|slug}
# Deactivate a feature/party
php artisan feature:deactivate {id|slug}
php artisan party:deactivate {id|slug}
# Check feature
$user->can('feature-slug'); //allows to check using laravel gates
$user->can('feature-slug', true); //validates if feature is ACTIVE
$user->can('feature-slug', false); //ignores status of feature
- Blade directives for
@feature
,@party
- Command to update feature status
- Gate support
- Support for UUIDs for
User
model - Support
can()
method to use accept aFeature
model - Middleware to secure requests for features/parties
- Feature expiration to tackle carying costs
- Management for Parties/Features using Livewire
composer test
Please see CHANGELOG for more information on what has changed recently.
Feel free to make suggestions of features or contribute by creating a Pull Request.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.