JosephSilber / bouncer

Laravel Eloquent roles and abilities.
MIT License
3.45k stars 330 forks source link

scope is not reset between tests #643

Open comhon-project opened 10 months ago

comhon-project commented 10 months ago

Hello team!

the Scope is persistent between several application initialization (typically during tests). the scope is defined as a static value in Silber\Bouncer\Database\Models and is not reset when bouncer service is initialized. Due to this, the scope is not reset between tests.

I guess it should be reset during Silber\Bouncer\Bouncer singleton instantiation.

(using Bouncer v1.0.1)

JosephSilber commented 10 months ago

Are you setting the scope in your test code, or are you testing code that sets the scope in userland code?

comhon-project commented 9 months ago

@JosephSilber , I'm testing my API, the scope is set in a middleware of the API.

comhon-project commented 7 months ago

@JosephSilber is there any news about this issue ?

EriBloo commented 4 months ago

Changing:

    protected function registerBouncer()
    {
        $this->app->singleton(Bouncer::class, function ($app) {
            return Bouncer::make()
                ->withClipboard(new CachedClipboard(new ArrayStore))
                ->withGate($app->make(Gate::class))
                ->create();
        });
    }

to:

    protected function registerBouncer()
    {
        $this->app->scoped(Bouncer::class, function ($app) {
            return Bouncer::make()
                ->withClipboard(new CachedClipboard(new ArrayStore))
                ->withGate($app->make(Gate::class))
                ->create();
        });
    }

in BouncerServiceProvider could fix this issue. Are you able to verify this?

comhon-project commented 4 months ago

@EriBloo thanks for your answer. but it doesn't solve the problem, even if the bouncer service is instantiated again, the scope is not reset. the scope is defined statically in Silber\Bouncer\Database\Models and there is no mechanism to reset it when instantiating new Bouncer service.