diff --git a/src/Bridge/ClientRepository.php b/src/Bridge/ClientRepository.php index 6acae5821..a15899f90 100644 --- a/src/Bridge/ClientRepository.php +++ b/src/Bridge/ClientRepository.php @@ -64,6 +64,10 @@ public function getClientEntity($clientIdentifier, $grantType = null, */ protected function handlesGrant($record, $grantType) { + if (is_array($record->grant_types) && !in_array($grantType, $record->grant_types)) { + return false; + } + switch ($grantType) { case 'authorization_code': return ! $record->firstParty(); diff --git a/tests/BridgeClientRepositoryTest.php b/tests/BridgeClientRepositoryTest.php index 4f5377a5f..0e8eb9cfc 100644 --- a/tests/BridgeClientRepositoryTest.php +++ b/tests/BridgeClientRepositoryTest.php @@ -88,6 +88,22 @@ public function test_client_credentials_grant_is_prevented() $this->assertNull($this->repository->getClientEntity(1, 'client_credentials', 'secret')); } + + public function test_grant_types_allows_request() + { + $client = $this->clientModelRepository->findActive(1); + $client->grant_types = ['client_credentials']; + + $this->assertInstanceOf('Laravel\Passport\Bridge\Client', $this->repository->getClientEntity(1, 'client_credentials', 'secret')); + } + + public function test_grant_types_disallows_request() + { + $client = $this->clientModelRepository->findActive(1); + $client->grant_types = ['client_credentials']; + + $this->assertNull($this->repository->getClientEntity(1, 'authorization_code', 'secret')); + } } class BridgeClientRepositoryTestClientStub @@ -97,6 +113,7 @@ class BridgeClientRepositoryTestClientStub public $secret = 'secret'; public $personal_access_client = false; public $password_client = false; + public $grant_types; public function firstParty() {