This commit is contained in:
Saeed Vaziry
2024-03-24 09:56:34 +01:00
committed by GitHub
parent 884f18db63
commit 4d051330d6
1055 changed files with 14493 additions and 20278 deletions

View File

@ -4,6 +4,9 @@
use App\Models\Database;
use App\Models\DatabaseUser;
use App\Models\Server;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
class LinkUser
@ -11,20 +14,49 @@ class LinkUser
/**
* @throws ValidationException
*/
public function link(DatabaseUser $databaseUser, array $databases): void
public function link(DatabaseUser $databaseUser, array $input): void
{
$dbs = Database::query()
->where('server_id', $databaseUser->server_id)
->whereIn('name', $databases)
->count();
if (count($databases) !== $dbs) {
throw ValidationException::withMessages(['databases' => __('Databases not found!')])
->errorBag('linkUser');
if (! isset($input['databases']) || ! is_array($input['databases'])) {
$input['databases'] = [];
}
$databaseUser->databases = $databases;
$databaseUser->unlinkUser();
$databaseUser->linkUser();
$this->validate($databaseUser->server, $input);
$dbs = Database::query()
->where('server_id', $databaseUser->server_id)
->whereIn('name', $input['databases'])
->count();
if (count($input['databases']) !== $dbs) {
throw ValidationException::withMessages(['databases' => __('Databases not found!')]);
}
$databaseUser->databases = $input['databases'];
// Unlink the user from all databases
$databaseUser->server->database()->handler()->unlink(
$databaseUser->username,
$databaseUser->host
);
// Link the user to the selected databases
$databaseUser->server->database()->handler()->link(
$databaseUser->username,
$databaseUser->host,
$databaseUser->databases
);
$databaseUser->save();
}
private function validate(Server $server, array $input): void
{
$rules = [
'databases.*' => [
'required',
Rule::exists('databases', 'name')->where('server_id', $server->id),
],
];
Validator::make($input, $rules)->validate();
}
}