Skip to content

Commit 02867cc

Browse files
authored
Merge pull request #626 from DirectoryTree/FEATURE-621
Add `RulePassed` and `RuleFailed` authentication events
2 parents aaaa1ad + 979aa21 commit 02867cc

File tree

5 files changed

+58
-0
lines changed

5 files changed

+58
-0
lines changed

src/Auth/Validator.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace LdapRecord\Laravel\Auth;
44

55
use Illuminate\Database\Eloquent\Model as Eloquent;
6+
use LdapRecord\Laravel\Events\Auth\RuleFailed;
7+
use LdapRecord\Laravel\Events\Auth\RulePassed;
68
use LdapRecord\Models\Model as LdapRecord;
79

810
class Validator
@@ -31,8 +33,12 @@ public function passes(LdapRecord $user, Eloquent $model = null): bool
3133
{
3234
foreach ($this->rules as $rule) {
3335
if (! $rule->passes($user, $model)) {
36+
event(new RuleFailed($rule, $user, $model));
37+
3438
return false;
3539
}
40+
41+
event(new RulePassed($rule, $user, $model));
3642
}
3743

3844
return true;

src/Events/Auth/RuleEvent.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace LdapRecord\Laravel\Events\Auth;
4+
5+
use Illuminate\Database\Eloquent\Model as EloquentModel;
6+
use LdapRecord\Laravel\Auth\Rule;
7+
use LdapRecord\Models\Model as LdapModel;
8+
9+
abstract class RuleEvent extends Event
10+
{
11+
/**
12+
* The authentication rule.
13+
*/
14+
public Rule $rule;
15+
16+
/**
17+
* Constructor.
18+
*/
19+
public function __construct(Rule $rule, LdapModel $object, EloquentModel $eloquent = null)
20+
{
21+
parent::__construct($object, $eloquent);
22+
23+
$this->rule = $rule;
24+
}
25+
}

src/Events/Auth/RuleFailed.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace LdapRecord\Laravel\Events\Auth;
4+
5+
class RuleFailed extends RuleEvent
6+
{
7+
//
8+
}

src/Events/Auth/RulePassed.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace LdapRecord\Laravel\Events\Auth;
4+
5+
class RulePassed extends RuleEvent
6+
{
7+
//
8+
}

tests/Unit/ValidatorTest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44

55
use Illuminate\Database\Eloquent\Model;
66
use Illuminate\Database\Eloquent\Model as Eloquent;
7+
use Illuminate\Support\Facades\Event;
78
use LdapRecord\Laravel\Auth\Rule;
89
use LdapRecord\Laravel\Auth\Validator;
10+
use LdapRecord\Laravel\Events\Auth\RuleFailed;
11+
use LdapRecord\Laravel\Events\Auth\RulePassed;
912
use LdapRecord\Laravel\Tests\TestCase;
1013
use LdapRecord\Models\Entry;
1114
use LdapRecord\Models\Model as LdapRecord;
@@ -28,14 +31,22 @@ public function test_rules_can_be_added()
2831

2932
public function test_passing_validation_rule()
3033
{
34+
Event::fake(RulePassed::class);
35+
3136
$rule = new TestPassingRule();
3237
$this->assertTrue((new Validator([$rule]))->passes(new Entry, new TestRuleModelStub));
38+
39+
Event::assertDispatched(RulePassed::class);
3340
}
3441

3542
public function test_failing_validation_rule()
3643
{
44+
Event::fake(RuleFailed::class);
45+
3746
$rule = new TestFailingRule();
3847
$this->assertFalse((new Validator([$rule]))->passes(new Entry, new TestRuleModelStub));
48+
49+
Event::assertDispatched(RuleFailed::class);
3950
}
4051

4152
public function test_all_rules_are_validated()

0 commit comments

Comments
 (0)