RolesServiceProvider   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 170
Duplicated Lines 0 %

Importance

Changes 14
Bugs 7 Features 2
Metric Value
wmc 15
eloc 73
c 14
b 7
f 2
dl 0
loc 170
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A register() 0 9 2
A loadMigrations() 0 4 2
A boot() 0 16 4
A loadSeedsFrom() 0 24 5
A registerBladeExtensions() 0 36 1
A publishFiles() 0 29 1
1
<?php
2
3
namespace jeremykenedy\LaravelRoles;
4
5
use Illuminate\Support\ServiceProvider;
6
use jeremykenedy\LaravelRoles\App\Http\Middleware\VerifyLevel;
7
use jeremykenedy\LaravelRoles\App\Http\Middleware\VerifyPermission;
8
use jeremykenedy\LaravelRoles\App\Http\Middleware\VerifyRole;
9
use jeremykenedy\LaravelRoles\Database\Seeders\DefaultConnectRelationshipsSeeder;
10
use jeremykenedy\LaravelRoles\Database\Seeders\DefaultPermissionsTableSeeder;
11
use jeremykenedy\LaravelRoles\Database\Seeders\DefaultRolesTableSeeder;
12
use jeremykenedy\LaravelRoles\Database\Seeders\DefaultUsersTableSeeder;
13
14
class RolesServiceProvider extends ServiceProvider
15
{
16
    private $_packageTag = 'laravelroles';
17
18
    /**
19
     * Indicates if loading of the provider is deferred.
20
     *
21
     * @var bool
22
     */
23
    protected $defer = false;
24
25
    /**
26
     * Bootstrap any application services.
27
     *
28
     * @param \Illuminate\Routing\Router $router The router
29
     *
30
     * @return void
31
     */
32
    public function boot()
33
    {
34
        if (config('roles.route_middlewares', true)) {
35
            $this->app['router']->aliasMiddleware('role', VerifyRole::class);
36
            $this->app['router']->aliasMiddleware('permission', VerifyPermission::class);
37
            $this->app['router']->aliasMiddleware('level', VerifyLevel::class);
38
        }
39
40
        if (config('roles.rolesGuiEnabled')) {
41
            $this->loadRoutesFrom(__DIR__.'/routes/web.php');
42
        }
43
        if (config('roles.rolesApiEnabled')) {
44
            $this->loadRoutesFrom(__DIR__.'/routes/api.php');
45
        }
46
        $this->loadTranslationsFrom(__DIR__.'/resources/lang/', $this->_packageTag);
47
        $this->registerBladeExtensions();
48
    }
49
50
    /**
51
     * Register any application services.
52
     *
53
     * @return void
54
     */
55
    public function register()
56
    {
57
        $this->mergeConfigFrom(__DIR__.'/config/roles.php', 'roles');
58
        $this->loadMigrations();
59
        if (config('roles.rolesGuiEnabled')) {
60
            $this->loadViewsFrom(__DIR__.'/resources/views/', $this->_packageTag);
61
        }
62
        $this->publishFiles();
63
        $this->loadSeedsFrom();
64
    }
65
66
    private function loadMigrations()
67
    {
68
        if (config('roles.defaultMigrations.enabled')) {
69
            $this->loadMigrationsFrom(__DIR__.'/Database/Migrations');
70
        }
71
    }
72
73
    /**
74
     * Loads a seeds.
75
     *
76
     * @return void
77
     */
78
    private function loadSeedsFrom()
79
    {
80
        $this->app->afterResolving('seed.handler', function ($handler) {
81
            if (config('roles.defaultSeeds.PermissionsTableSeeder')) {
82
                $handler->register(
83
                    DefaultPermissionsTableSeeder::class
84
                );
85
            }
86
87
            if (config('roles.defaultSeeds.RolesTableSeeder')) {
88
                $handler->register(
89
                    DefaultRolesTableSeeder::class
90
                );
91
            }
92
93
            if (config('roles.defaultSeeds.ConnectRelationshipsSeeder')) {
94
                $handler->register(
95
                    DefaultConnectRelationshipsSeeder::class
96
                );
97
            }
98
99
            if (config('roles.defaultSeeds.UsersTableSeeder')) {
100
                $handler->register(
101
                    DefaultUsersTableSeeder::class
102
                );
103
            }
104
        });
105
    }
106
107
    /**
108
     * Publish files for package.
109
     *
110
     * @return void
111
     */
112
    private function publishFiles()
113
    {
114
        $publishTag = $this->_packageTag;
115
116
        $this->publishes([
117
            __DIR__.'/config/roles.php' => config_path('roles.php'),
118
        ], $publishTag.'-config');
119
120
        $this->publishes([
121
            __DIR__.'/Database/Migrations' => database_path('migrations'),
122
        ], $publishTag.'-migrations');
123
124
        $this->publishes([
125
            __DIR__.'/Database/Seeders/publish' => database_path('seeders'),
126
        ], $publishTag.'-seeds');
127
128
        $this->publishes([
129
            __DIR__.'/config/roles.php'         => config_path('roles.php'),
130
            __DIR__.'/Database/Migrations'      => database_path('migrations'),
131
            __DIR__.'/Database/Seeders/publish' => database_path('seeders'),
132
        ], $publishTag);
133
134
        $this->publishes([
135
            __DIR__.'/resources/views' => base_path('resources/views/vendor/'.$publishTag),
136
        ], $publishTag.'-views');
137
138
        $this->publishes([
139
            __DIR__.'/resources/lang' => base_path('resources/lang/vendor/'.$publishTag),
140
        ], $publishTag.'-lang');
141
    }
142
143
    /**
144
     * Register Blade extensions.
145
     *
146
     * @return void
147
     */
148
    protected function registerBladeExtensions()
149
    {
150
        $blade = $this->app['view']->getEngineResolver()->resolve('blade')->getCompiler();
151
152
        $blade->directive('role', function ($expression) {
153
            return "<?php if (Auth::check() && Auth::user()->hasRole({$expression})): ?>";
154
        });
155
156
        $blade->directive('endrole', function () {
157
            return '<?php endif; ?>';
158
        });
159
160
        $blade->directive('permission', function ($expression) {
161
            return "<?php if (Auth::check() && Auth::user()->hasPermission({$expression})): ?>";
162
        });
163
164
        $blade->directive('endpermission', function () {
165
            return '<?php endif; ?>';
166
        });
167
168
        $blade->directive('level', function ($expression) {
169
            $level = trim($expression, '()');
170
171
            return "<?php if (Auth::check() && Auth::user()->level() >= {$level}): ?>";
172
        });
173
174
        $blade->directive('endlevel', function () {
175
            return '<?php endif; ?>';
176
        });
177
178
        $blade->directive('allowed', function ($expression) {
179
            return "<?php if (Auth::check() && Auth::user()->allowed({$expression})): ?>";
180
        });
181
182
        $blade->directive('endallowed', function () {
183
            return '<?php endif; ?>';
184
        });
185
    }
186
}
187