Skip to content

Commit 3d892c6

Browse files
authored
Merge pull request #55 from utopia-php/feat-skip-auth-method
Auth skip method
2 parents bd765cd + 14a5f78 commit 3d892c6

2 files changed

Lines changed: 40 additions & 29 deletions

File tree

src/Database/Validator/Authorization.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,22 @@ public static function setDefaultStatus(bool $status): void
154154
self::$status = $status;
155155
}
156156

157+
/**
158+
* Skip Authorization
159+
*
160+
* Skips authorization for the code to be executed inside the callback
161+
*
162+
* @return mixed
163+
*/
164+
public static function skip(callable $callback)
165+
{
166+
self::disable();
167+
$result = $callback();
168+
self::reset();
169+
170+
return $result;
171+
}
172+
157173
/**
158174
* Enable Authorization checks
159175
*

tests/Database/Validator/AuthorizationTest.php

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,8 @@
88

99
class AuthorizationTest extends TestCase
1010
{
11-
/**
12-
* @var Authorization
13-
*/
14-
protected $object = null;
15-
16-
/**
17-
* @var Document
18-
*/
19-
protected $document = null;
20-
2111
public function setUp(): void
2212
{
23-
$this->document = new Document([
24-
'$id' => uniqid(),
25-
'$collection' => uniqid(),
26-
'$read' => ['user:123', 'team:123'],
27-
'$write' => ['role:all'],
28-
]);
29-
$this->object = new Authorization($this->document, 'read');
3013
}
3114

3215
public function tearDown(): void
@@ -35,10 +18,18 @@ public function tearDown(): void
3518

3619
public function testValues()
3720
{
38-
$this->assertEquals($this->object->isValid($this->document->getRead()), false);
39-
$this->assertEquals($this->object->isValid(''), false);
40-
$this->assertEquals($this->object->isValid([]), false);
41-
$this->assertEquals($this->object->getDescription(), 'No permissions provided for action \'read\'');
21+
$document = new Document([
22+
'$id' => uniqid(),
23+
'$collection' => uniqid(),
24+
'$read' => ['user:123', 'team:123'],
25+
'$write' => ['role:all'],
26+
]);
27+
$object = new Authorization($document, 'read');
28+
29+
$this->assertEquals($object->isValid($document->getRead()), false);
30+
$this->assertEquals($object->isValid(''), false);
31+
$this->assertEquals($object->isValid([]), false);
32+
$this->assertEquals($object->getDescription(), 'No permissions provided for action \'read\'');
4233

4334
Authorization::setRole('user:456');
4435
Authorization::setRole('user:123');
@@ -48,37 +39,37 @@ public function testValues()
4839
$this->assertEquals(Authorization::isRole(''), false);
4940
$this->assertEquals(Authorization::isRole('role:all'), true);
5041

51-
$this->assertEquals($this->object->isValid($this->document->getRead()), true);
42+
$this->assertEquals($object->isValid($document->getRead()), true);
5243

5344
Authorization::cleanRoles();
5445

55-
$this->assertEquals($this->object->isValid($this->document->getRead()), false);
46+
$this->assertEquals($object->isValid($document->getRead()), false);
5647

5748
Authorization::setRole('team:123');
5849

59-
$this->assertEquals($this->object->isValid($this->document->getRead()), true);
50+
$this->assertEquals($object->isValid($document->getRead()), true);
6051

6152
Authorization::cleanRoles();
6253
Authorization::disable();
6354

64-
$this->assertEquals($this->object->isValid($this->document->getRead()), true);
55+
$this->assertEquals($object->isValid($document->getRead()), true);
6556

6657
Authorization::reset();
6758

68-
$this->assertEquals($this->object->isValid($this->document->getRead()), false);
59+
$this->assertEquals($object->isValid($document->getRead()), false);
6960

7061
Authorization::setDefaultStatus(false);
7162
Authorization::disable();
7263

73-
$this->assertEquals($this->object->isValid($this->document->getRead()), true);
64+
$this->assertEquals($object->isValid($document->getRead()), true);
7465

7566
Authorization::reset();
7667

77-
$this->assertEquals($this->object->isValid($this->document->getRead()), true);
68+
$this->assertEquals($object->isValid($document->getRead()), true);
7869

7970
Authorization::enable();
8071

81-
$this->assertEquals($this->object->isValid($this->document->getRead()), false);
72+
$this->assertEquals($object->isValid($document->getRead()), false);
8273

8374
Authorization::setRole('textX');
8475

@@ -87,5 +78,9 @@ public function testValues()
8778
Authorization::unsetRole('textX');
8879

8980
$this->assertNotContains('textX', Authorization::getRoles());
81+
82+
// Test skip method
83+
$this->assertEquals($object->isValid($document->getRead()), false);
84+
$this->assertEquals(Authorization::skip(function() use ($object, $document) {return $object->isValid($document->getRead());}), true);
9085
}
9186
}

0 commit comments

Comments
 (0)