companyRepo = $repository; } public function syncPermissions(CompanyPlan $companyPlan,Company $company = null ){ //loop each company with this plan and attach detach permissions if(!empty($company)){ $companies = collect($company); }else{ $companies = $this->companyRepo->getCompaniesWithPlan($companyPlan); } $planPermissions = $companyPlan->permissions()->pluck('id'); foreach ($companies as $company){ // loop each role for company and check if there is permission that needs to be removed $roles = Role::where('company_id',$company->id)->get(); foreach ($roles as $role){ //$permissionsToRemove = $role->permissions()->pluck('id')->diff($planPermissions); $role->permissions()->sync($planPermissions); } } app(PermissionRegistrar::class)->forgetCachedPermissions(); app()['cache']->forget('spatie.permission.cache'); } }