mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Ensure companies have the correct size when there are heterogeneous user permissions
This commit is contained in:
parent
ea1f2945b2
commit
2f9fcbd42e
@ -93,6 +93,7 @@ class UserRepository extends BaseRepository
|
|||||||
$user->companies()->attach($company->id, $data['company_user']);
|
$user->companies()->attach($company->id, $data['company_user']);
|
||||||
} else {
|
} else {
|
||||||
if (auth()->user()->isAdmin()) {
|
if (auth()->user()->isAdmin()) {
|
||||||
|
|
||||||
$cu->fill($data['company_user']);
|
$cu->fill($data['company_user']);
|
||||||
$cu->restore();
|
$cu->restore();
|
||||||
$cu->tokens()->restore();
|
$cu->tokens()->restore();
|
||||||
@ -117,6 +118,8 @@ class UserRepository extends BaseRepository
|
|||||||
}
|
}
|
||||||
$user->restore();
|
$user->restore();
|
||||||
|
|
||||||
|
$this->verifyCorrectCompanySizeForPermissions($user);
|
||||||
|
|
||||||
return $user->fresh();
|
return $user->fresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,4 +214,35 @@ class UserRepository extends BaseRepository
|
|||||||
|
|
||||||
event(new UserWasRestored($user, auth()->user(), auth()->user()->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
|
event(new UserWasRestored($user, auth()->user(), auth()->user()->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If we have multiple users in the system,
|
||||||
|
* and there are some that are not admins,
|
||||||
|
* we force all companies to large to ensure
|
||||||
|
* the queries are appropriate for all users
|
||||||
|
*
|
||||||
|
* @param User $user
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function verifyCorrectCompanySizeForPermissions(User $user): void
|
||||||
|
{
|
||||||
|
|
||||||
|
if(Ninja::isSelfHost() || (Ninja::isHosted() && $user->account->isEnterpriseClient()))
|
||||||
|
{
|
||||||
|
|
||||||
|
$user->account()
|
||||||
|
->whereHas('companies', function ($query){
|
||||||
|
$query->where('is_large',0);
|
||||||
|
})
|
||||||
|
->whereHas('company_users', function ($query){
|
||||||
|
$query->where('is_admin', 0);
|
||||||
|
})
|
||||||
|
->cursor()->each(function ($account){
|
||||||
|
$account->companies()->update(['is_large' => true]);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user