Open cosmastech opened 3 weeks ago
Thanks for submitting a PR!
Note that draft PR's are not reviewed. If you would like a review, please mark your pull request as ready for review in the GitHub user interface.
Pull requests that are abandoned in draft may be closed due to inactivity.
Drafting pending review from @timacdonald
This should resolve https://github.com/laravel/pennant/issues/112
We are building a feature flags endpoint for our mobile and web consumers. We need to be able to get all features for 3-4 scopes which are related to the user, but not the user object itself.
I ran into this exact issue earlier today. I saw that this issue had been open for a few weeks without a PR so I figured I'd take a stab at it.
Given we have features defined for different scopes
When we attempt to load all features for a particular scope
Then we expect to receive feature flag definitions ONLY for that apply to Users.
Currently, however, an exception is thrown: TypeError: Tests\Feature\DatabaseDriverTest::Tests\Feature{closure}(): Argument #1 ($t) must be of type Workbench\App\Models\Team, Workbench\App\Models\User given, called in /Users/luke/Projects/laravel-pennant/src/Drivers/Decorator.php on line 173
Non-goals of this PR
One outstanding question is: do we expect to allow for union or intersection types in the resolving function? Like
Feature::define('team-or-user-feature', fn(Team|User $v) => true);
Seems like this probably wouldn't work with how scopes are set up in general. I am sure that my change will not work in this case.Also, you can still call
Feature::for($user)->activate('team-scoped-feature');
I believe that ideally there would be a guard for this, but it seems like it's beyond the scope of this PR.