40 lines
1.5 KiB
PHP
40 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class EvaluationAccess
|
|
{
|
|
public function dashboardEntry(Request $request): bool
|
|
{
|
|
return EvaluationNavigation::local($request) && $request->getHost() === '127.0.0.1'
|
|
&& $request->getPort() === 8005 && $request->isMethod('GET') && $request->path() === 'dashboard';
|
|
}
|
|
|
|
public function source(Request $request): User
|
|
{
|
|
abort_unless(EvaluationNavigation::local($request), 404);
|
|
$db = DB::connection();
|
|
abort_unless($db->getDriverName() === 'pgsql' && $db->getConfig('host') === '127.0.0.1'
|
|
&& preg_match('/^compras_receipts_test_[a-f0-9]{12}$/D', $db->getDatabaseName()), 404);
|
|
$identity = $db->selectOne('select current_database() as db, current_user as role');
|
|
abort_unless($identity->db === $db->getDatabaseName() && $identity->role === 'payable_qa_'.substr($identity->db, -12), 404);
|
|
$source = User::query()->where('email', 'preparacao-obrigacoes@example.test')->firstOrFail();
|
|
abort_unless($source->tenant_id !== null, 404);
|
|
|
|
return $source;
|
|
}
|
|
|
|
public function owner(Request $request): User
|
|
{
|
|
$source = $this->source($request);
|
|
$owner = User::query()->where('tenant_id', $source->tenant_id)->where('email', 'avaliacao-admin@example.test')->firstOrFail();
|
|
abort_unless($owner->hasFunctions(['admin']) && $owner->email_verified_at !== null, 404);
|
|
|
|
return $owner;
|
|
}
|
|
}
|