Viewing file: PermissionServiceProvider.php (5.72 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Spatie\Permission;
use Illuminate\Filesystem\Filesystem; use Illuminate\Routing\Route; use Illuminate\Support\Collection; use Illuminate\Support\ServiceProvider; use Illuminate\View\Compilers\BladeCompiler; use Spatie\Permission\Contracts\Permission as PermissionContract; use Spatie\Permission\Contracts\Role as RoleContract;
class PermissionServiceProvider extends ServiceProvider { public function boot(PermissionRegistrar $permissionLoader, Filesystem $filesystem) { if (function_exists('config_path')) { // function not available and 'publish' not relevant in Lumen $this->publishes([ __DIR__.'/../config/permission.php' => config_path('permission.php'), ], 'config');
$this->publishes([ __DIR__.'/../database/migrations/create_permission_tables.php.stub' => $this->getMigrationFileName($filesystem), ], 'migrations'); }
$this->registerMacroHelpers();
$this->commands([ Commands\CacheReset::class, Commands\CreateRole::class, Commands\CreatePermission::class, Commands\Show::class, ]);
$this->registerModelBindings();
$permissionLoader->clearClassPermissions(); $permissionLoader->registerPermissions();
$this->app->singleton(PermissionRegistrar::class, function ($app) use ($permissionLoader) { return $permissionLoader; }); }
public function register() { $this->mergeConfigFrom( __DIR__.'/../config/permission.php', 'permission' );
$this->registerBladeExtensions(); }
protected function registerModelBindings() { $config = $this->app->config['permission.models'];
if (! $config) { return; }
$this->app->bind(PermissionContract::class, $config['permission']); $this->app->bind(RoleContract::class, $config['role']); }
protected function registerBladeExtensions() { $this->app->afterResolving('blade.compiler', function (BladeCompiler $bladeCompiler) { $bladeCompiler->directive('role', function ($arguments) { list($role, $guard) = explode(',', $arguments.',');
return "<?php if(auth({$guard})->check() && auth({$guard})->user()->hasRole({$role})): ?>"; }); $bladeCompiler->directive('elserole', function ($arguments) { list($role, $guard) = explode(',', $arguments.',');
return "<?php elseif(auth({$guard})->check() && auth({$guard})->user()->hasRole({$role})): ?>"; }); $bladeCompiler->directive('endrole', function () { return '<?php endif; ?>'; });
$bladeCompiler->directive('hasrole', function ($arguments) { list($role, $guard) = explode(',', $arguments.',');
return "<?php if(auth({$guard})->check() && auth({$guard})->user()->hasRole({$role})): ?>"; }); $bladeCompiler->directive('endhasrole', function () { return '<?php endif; ?>'; });
$bladeCompiler->directive('hasanyrole', function ($arguments) { list($roles, $guard) = explode(',', $arguments.',');
return "<?php if(auth({$guard})->check() && auth({$guard})->user()->hasAnyRole({$roles})): ?>"; }); $bladeCompiler->directive('endhasanyrole', function () { return '<?php endif; ?>'; });
$bladeCompiler->directive('hasallroles', function ($arguments) { list($roles, $guard) = explode(',', $arguments.',');
return "<?php if(auth({$guard})->check() && auth({$guard})->user()->hasAllRoles({$roles})): ?>"; }); $bladeCompiler->directive('endhasallroles', function () { return '<?php endif; ?>'; });
$bladeCompiler->directive('unlessrole', function ($arguments) { list($role, $guard) = explode(',', $arguments.',');
return "<?php if(!auth({$guard})->check() || ! auth({$guard})->user()->hasRole({$role})): ?>"; }); $bladeCompiler->directive('endunlessrole', function () { return '<?php endif; ?>'; }); }); }
protected function registerMacroHelpers() { if (! method_exists(Route::class, 'macro')) { // Lumen return; }
Route::macro('role', function ($roles = []) { if (! is_array($roles)) { $roles = [$roles]; }
$roles = implode('|', $roles);
$this->middleware("role:$roles");
return $this; });
Route::macro('permission', function ($permissions = []) { if (! is_array($permissions)) { $permissions = [$permissions]; }
$permissions = implode('|', $permissions);
$this->middleware("permission:$permissions");
return $this; }); }
/** * Returns existing migration file if found, else uses the current timestamp. * * @param Filesystem $filesystem * @return string */ protected function getMigrationFileName(Filesystem $filesystem): string { $timestamp = date('Y_m_d_His');
return Collection::make($this->app->databasePath().DIRECTORY_SEPARATOR.'migrations'.DIRECTORY_SEPARATOR) ->flatMap(function ($path) use ($filesystem) { return $filesystem->glob($path.'*_create_permission_tables.php'); })->push($this->app->databasePath()."/migrations/{$timestamp}_create_permission_tables.php") ->first(); } }
|