123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <?php
- namespace Illuminate\Tests\Foundation;
- use Illuminate\Auth\Access\AuthorizationException;
- use Illuminate\Auth\Access\Gate;
- use Illuminate\Auth\Access\Response;
- use Illuminate\Container\Container;
- use Illuminate\Contracts\Auth\Access\Gate as GateContract;
- use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
- use PHPUnit\Framework\TestCase;
- class FoundationAuthorizesRequestsTraitTest extends TestCase
- {
- protected function tearDown(): void
- {
- Container::setInstance(null);
- }
- public function testBasicGateCheck()
- {
- unset($_SERVER['_test.authorizes.trait']);
- $gate = $this->getBasicGate();
- $gate->define('baz', function () {
- $_SERVER['_test.authorizes.trait'] = true;
- return true;
- });
- $response = (new FoundationTestAuthorizeTraitClass)->authorize('baz');
- $this->assertInstanceOf(Response::class, $response);
- $this->assertTrue($_SERVER['_test.authorizes.trait']);
- }
- public function testExceptionIsThrownIfGateCheckFails()
- {
- $this->expectException(AuthorizationException::class);
- $this->expectExceptionMessage('This action is unauthorized.');
- $gate = $this->getBasicGate();
- $gate->define('baz', function () {
- return false;
- });
- (new FoundationTestAuthorizeTraitClass)->authorize('baz');
- }
- public function testPoliciesMayBeCalled()
- {
- unset($_SERVER['_test.authorizes.trait.policy']);
- $gate = $this->getBasicGate();
- $gate->policy(FoundationAuthorizesRequestTestClass::class, FoundationAuthorizesRequestTestPolicy::class);
- $response = (new FoundationTestAuthorizeTraitClass)->authorize('update', new FoundationAuthorizesRequestTestClass);
- $this->assertInstanceOf(Response::class, $response);
- $this->assertTrue($_SERVER['_test.authorizes.trait.policy']);
- }
- public function testPolicyMethodMayBeGuessedPassingModelInstance()
- {
- unset($_SERVER['_test.authorizes.trait.policy']);
- $gate = $this->getBasicGate();
- $gate->policy(FoundationAuthorizesRequestTestClass::class, FoundationAuthorizesRequestTestPolicy::class);
- $response = (new FoundationTestAuthorizeTraitClass)->authorize(new FoundationAuthorizesRequestTestClass);
- $this->assertInstanceOf(Response::class, $response);
- $this->assertTrue($_SERVER['_test.authorizes.trait.policy']);
- }
- public function testPolicyMethodMayBeGuessedPassingClassName()
- {
- 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']);
- }
- public function testPolicyMethodMayBeGuessedAndNormalized()
- {
- unset($_SERVER['_test.authorizes.trait.policy']);
- $gate = $this->getBasicGate();
- $gate->policy(FoundationAuthorizesRequestTestClass::class, FoundationAuthorizesRequestTestPolicy::class);
- (new FoundationTestAuthorizeTraitClass)->store(new FoundationAuthorizesRequestTestClass);
- $this->assertTrue($_SERVER['_test.authorizes.trait.policy']);
- }
- public function getBasicGate()
- {
- $container = Container::setInstance(new Container);
- $gate = new Gate($container, function () {
- return (object) ['id' => 1];
- });
- $container->instance(GateContract::class, $gate);
- return $gate;
- }
- }
- class FoundationAuthorizesRequestTestClass
- {
- //
- }
- class FoundationAuthorizesRequestTestPolicy
- {
- public function create()
- {
- $_SERVER['_test.authorizes.trait.policy'] = true;
- return true;
- }
- public function update()
- {
- $_SERVER['_test.authorizes.trait.policy'] = true;
- return true;
- }
- public function testPolicyMethodMayBeGuessedPassingModelInstance()
- {
- $_SERVER['_test.authorizes.trait.policy'] = true;
- return true;
- }
- public function testPolicyMethodMayBeGuessedPassingClassName()
- {
- $_SERVER['_test.authorizes.trait.policy'] = true;
- return true;
- }
- }
- class FoundationTestAuthorizeTraitClass
- {
- use AuthorizesRequests;
- public function store($object)
- {
- $this->authorize($object);
- }
- }
|