forked from Lomkit/laravel-access-control
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAccessServiceProvider.php
More file actions
118 lines (102 loc) · 2.97 KB
/
AccessServiceProvider.php
File metadata and controls
118 lines (102 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
namespace Lomkit\Access;
use Illuminate\Foundation\Events\PublishingStubs;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\ServiceProvider;
use Laravel\Scout\Builder;
use Lomkit\Access\Console\ControlMakeCommand;
use Lomkit\Access\Console\PerimeterMakeCommand;
class AccessServiceProvider extends ServiceProvider
{
protected array $devCommands = [
'ControlMake' => ControlMakeCommand::class,
'PerimeterMake' => PerimeterMakeCommand::class,
];
/**
* Registers the service provider.
*
* @return void
*/
public function register()
{
$this->registerCommands($this->devCommands);
$this->mergeConfigFrom(
__DIR__.'/../config/access-control.php',
'access-control'
);
}
/**
* Bootstrap any package services.
*/
public function boot()
{
$this->registerPublishing();
$this->registerStubs();
$this->bootScoutBuilder();
}
/**
* Registers a macro on Laravel Scout's Builder.
*/
protected function bootScoutBuilder(): void
{
if (class_exists(Builder::class)) {
Builder::macro('controlled', function (Builder $builder) {
$control = $builder->model->newControl();
return $control->queried($builder, Auth::user());
});
}
}
/**
* Register the given commands.
*
* @param array $commands
*
* @return void
*/
protected function registerCommands(array $commands)
{
foreach ($commands as $commandName => $command) {
$method = "register{$commandName}Command";
if (method_exists($this, $method)) {
$this->{$method}();
} else {
$this->app->singleton($command);
}
}
$this->commands(array_values($commands));
}
/**
* Register the stubs on the default laravel stub publish command.
*/
protected function registerStubs()
{
Event::listen(function (PublishingStubs $event) {
$event->add(realpath(__DIR__.'/Console/stubs/control.stub'), 'control.stub');
$event->add(realpath(__DIR__.'/Console/stubs/perimeter.plain.stub'), 'perimeter.plain.stub');
$event->add(realpath(__DIR__.'/Console/stubs/perimeter.overlay.stub'), 'perimeter.overlay.stub');
});
}
/**
* Register the package's publishable resources.
*
* @return void
*/
private function registerPublishing()
{
if ($this->app->runningInConsole()) {
$this->publishes([
__DIR__.'/../config/access-control.php' => config_path('access-control.php'),
], 'access-control-config');
}
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return array_values($this->devCommands);
}
}