Bristol SU Support Package
PermissionServiceProvider.php
Go to the documentation of this file.
1 <?php
2 
3 
5 
6 
12 use BristolSU\Support\Permissions\Facade\PermissionTester as PermissionTesterFacade;
25 
29 class PermissionServiceProvider extends ServiceProvider
30 {
31 
39  public function register()
40  {
41  $this->app->bind(PermissionContract::class, Permission::class);
42  $this->app->bind(PermissionRepositoryContract::class, PermissionRepository::class);
43  $this->app->singleton(PermissionStoreContract::class, PermissionStore::class);
44  $this->app->singleton(PermissionTesterContract::class, PermissionTester::class);
45  }
46 
58  public function boot()
59  {
60  // Check system permissions
61  PermissionTesterFacade::register($this->app->make(SystemUserPermission::class));
62  // Check module instance override permissions
63  PermissionTesterFacade::register($this->app->make(ModuleInstanceUserOverridePermission::class));
64  PermissionTesterFacade::register($this->app->make(ModuleInstanceGroupOverridePermission::class));
65  PermissionTesterFacade::register($this->app->make(ModuleInstanceRoleOverridePermission::class));
66  // Check default module instance permissions
67  PermissionTesterFacade::register($this->app->make(ModuleInstancePermissions::class));
68 
69  Gate::before(function(User $user, $ability) {
70  return app()->make(PermissionTesterContract::class)->evaluate($ability);
71  });
72 
73  Route::bind('module_instance_permission', function($id) {
74  return ModuleInstancePermission::findOrFail($id);
75  });
76 
77  Route::bind('site_permission', function($ability) {
78  $permission = app(PermissionRepositoryContract::class)->get($ability);
79  if ($permission->getType() !== 'global') {
80  throw new \HttpException('Permission not a site permission', 404);
81  }
82  return $permission;
83  });
84 
85  Route::bind('permission', function($ability) {
86  return app(PermissionRepositoryContract::class)->get($ability);
87  });
88 
89  }
90 }