diff --git a/src/Illuminate/Foundation/Auth/Access/AuthorizesResources.php b/src/Illuminate/Foundation/Auth/Access/AuthorizesResources.php index 5240e4476436..42deeec3995a 100644 --- a/src/Illuminate/Foundation/Auth/Access/AuthorizesResources.php +++ b/src/Illuminate/Foundation/Auth/Access/AuthorizesResources.php @@ -16,10 +16,16 @@ public function authorizeResource($model, $parameter = null, array $options = [] { $parameter = $parameter ?: strtolower(class_basename($model)); + $middleware = array(); + foreach ($this->resourceAbilityMap() as $method => $ability) { $modelName = in_array($method, ['index', 'create', 'store']) ? $model : $parameter; - $this->middleware("can:{$ability},{$modelName}", $options)->only($method); + $middleware["can:{$ability},{$modelName}"][] = $method; + } + + foreach ($middleware as $middlewareName => $methods) { + $this->middleware($middlewareName, $options)->only($methods); } } diff --git a/tests/Auth/AuthorizesResourcesTest.php b/tests/Auth/AuthorizesResourcesTest.php index 227f52f348fd..9a6a44ae7252 100644 --- a/tests/Auth/AuthorizesResourcesTest.php +++ b/tests/Auth/AuthorizesResourcesTest.php @@ -11,49 +11,49 @@ public function testIndexMethod() { $controller = new AuthorizesResourcesController($this->request('index')); - $this->assertHasMiddleware($controller, 'can:view,App\User'); + $this->assertHasMiddleware($controller, 'index', 'can:view,App\User'); } public function testCreateMethod() { $controller = new AuthorizesResourcesController($this->request('create')); - $this->assertHasMiddleware($controller, 'can:create,App\User'); + $this->assertHasMiddleware($controller, 'create', 'can:create,App\User'); } public function testStoreMethod() { $controller = new AuthorizesResourcesController($this->request('store')); - $this->assertHasMiddleware($controller, 'can:create,App\User'); + $this->assertHasMiddleware($controller, 'store', 'can:create,App\User'); } public function testShowMethod() { $controller = new AuthorizesResourcesController($this->request('show')); - $this->assertHasMiddleware($controller, 'can:view,user'); + $this->assertHasMiddleware($controller, 'show', 'can:view,user'); } public function testEditMethod() { $controller = new AuthorizesResourcesController($this->request('edit')); - $this->assertHasMiddleware($controller, 'can:update,user'); + $this->assertHasMiddleware($controller, 'edit', 'can:update,user'); } public function testUpdateMethod() { $controller = new AuthorizesResourcesController($this->request('update')); - $this->assertHasMiddleware($controller, 'can:update,user'); + $this->assertHasMiddleware($controller, 'update', 'can:update,user'); } public function testDestroyMethod() { $controller = new AuthorizesResourcesController($this->request('destroy')); - $this->assertHasMiddleware($controller, 'can:delete,user'); + $this->assertHasMiddleware($controller, 'destroy', 'can:delete,user'); } /** @@ -63,10 +63,11 @@ public function testDestroyMethod() * @param string $middleware * @return void */ - protected function assertHasMiddleware($controller, $middleware) + protected function assertHasMiddleware($controller, $method, $middleware) { $this->assertTrue( - in_array($middleware, array_keys($controller->getMiddleware())), + in_array($middleware, array_keys($controller->getMiddleware())) + && in_array($method, $controller->getMiddleware()[$middleware]['only']), "The [{$middleware}] middleware was not registered" ); }