'App\Policies\Partners\CustomerPolicy', 'App\Entities\Partners\Vendor' => 'App\Policies\Partners\VendorPolicy', 'App\Entities\Users\Event' => 'App\Policies\EventPolicy', ]; /** * Register any application authentication / authorization services. * * @return void */ public function boot() { $this->registerPolicies(); // Dynamically register permissions with Laravel's Gate. foreach ($this->getPermissions() as $permission) { Gate::define($permission, function ($user) { return $user->hasRole('admin'); }); } Gate::define('add_project', function ($user) { return $user->hasRole('admin'); }); Gate::define('manage_project', function ($user, $project) { return $user->id == $project->owner_id; }); Gate::define('manage_features', function ($user, $project) { return $user->id == $project->owner_id; }); Gate::define('manage_feature', function ($user, $feature) { return $user->id == $feature->worker_id; }); } /** * Fetch the collection of site permissions. * * @return \Illuminate\Database\Eloquent\Collection */ protected function getPermissions() { return [ 'manage_users', 'manage_role_permissions', 'manage_backups', 'manage_options', 'manage_projects', 'manage_payments', 'manage_subscriptions', 'see_reports', ]; } }