diff --git a/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php b/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php index c6a855a53c37..01dcf6fdb618 100644 --- a/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php +++ b/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php @@ -48,7 +48,7 @@ public function authorizeForUser($user, $ability, $arguments = []) */ protected function parseAbilityAndArguments($ability, $arguments) { - if (is_string($ability)) { + if (is_string($ability) && (! class_exists($ability))) { return [$ability, $arguments]; } diff --git a/tests/Foundation/FoundationAuthorizesRequestsTraitTest.php b/tests/Foundation/FoundationAuthorizesRequestsTraitTest.php index 74bb66d1311f..cad0eeed1e8d 100644 --- a/tests/Foundation/FoundationAuthorizesRequestsTraitTest.php +++ b/tests/Foundation/FoundationAuthorizesRequestsTraitTest.php @@ -14,13 +14,13 @@ public function test_basic_gate_check() $gate = $this->getBasicGate(); - $gate->define('foo', function () { + $gate->define('baz', function () { $_SERVER['_test.authorizes.trait'] = true; return true; }); - $response = (new FoundationTestAuthorizeTraitClass)->authorize('foo'); + $response = (new FoundationTestAuthorizeTraitClass)->authorize('baz'); $this->assertInstanceOf(Response::class, $response); $this->assertTrue($_SERVER['_test.authorizes.trait']); @@ -33,11 +33,11 @@ public function test_exception_is_thrown_if_gate_check_fails() { $gate = $this->getBasicGate(); - $gate->define('foo', function () { + $gate->define('baz', function () { return false; }); - (new FoundationTestAuthorizeTraitClass)->authorize('foo'); + (new FoundationTestAuthorizeTraitClass)->authorize('baz'); } public function test_policies_may_be_called() @@ -54,7 +54,7 @@ public function test_policies_may_be_called() $this->assertTrue($_SERVER['_test.authorizes.trait.policy']); } - public function test_policy_method_may_be_guessed() + public function test_policy_method_may_be_guessed_passing_model_instance() { unset($_SERVER['_test.authorizes.trait.policy']); @@ -62,7 +62,21 @@ public function test_policy_method_may_be_guessed() $gate->policy(FoundationAuthorizesRequestTestClass::class, FoundationAuthorizesRequestTestPolicy::class); - $response = (new FoundationTestAuthorizeTraitClass)->authorize([new FoundationAuthorizesRequestTestClass]); + $response = (new FoundationTestAuthorizeTraitClass)->authorize(new FoundationAuthorizesRequestTestClass); + + $this->assertInstanceOf(Response::class, $response); + $this->assertTrue($_SERVER['_test.authorizes.trait.policy']); + } + + public function test_policy_method_may_be_guessed_passing_class_name() + { + unset($_SERVER['_test.authorizes.trait.policy']); + + $gate = $this->getBasicGate(); + + $gate->policy(FoundationAuthorizesRequestTestClass::class, FoundationAuthorizesRequestTestPolicy::class); + + $response = (new FoundationTestAuthorizeTraitClass)->authorize(FoundationAuthorizesRequestTestClass::class); $this->assertInstanceOf(Response::class, $response); $this->assertTrue($_SERVER['_test.authorizes.trait.policy']); @@ -115,7 +129,14 @@ public function update() return true; } - public function test_policy_method_may_be_guessed() + public function test_policy_method_may_be_guessed_passing_model_instance() + { + $_SERVER['_test.authorizes.trait.policy'] = true; + + return true; + } + + public function test_policy_method_may_be_guessed_passing_class_name() { $_SERVER['_test.authorizes.trait.policy'] = true;