Skrytí osobních údajů #1
Nezobrazovat detail logu anonymnímu uživateli #2
This commit is contained in:
@@ -7,6 +7,7 @@ use App\Models\LogQso;
|
||||
use App\Models\EvaluationRun;
|
||||
use App\Models\QsoOverride;
|
||||
use App\Models\QsoResult;
|
||||
use App\Models\Round;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
@@ -86,6 +87,8 @@ class LogController extends BaseController
|
||||
*/
|
||||
public function show(Request $request, Log $log): JsonResponse
|
||||
{
|
||||
$this->authorize('view', $log);
|
||||
|
||||
$includeQsos = $request->boolean('include_qsos', false);
|
||||
$relations = ['round', 'file'];
|
||||
if ($includeQsos) {
|
||||
@@ -96,11 +99,54 @@ class LogController extends BaseController
|
||||
return response()->json($log);
|
||||
}
|
||||
|
||||
/**
|
||||
* Veřejný detail logu – pouze ne-citlivá hlavička + deklarované výsledky.
|
||||
*/
|
||||
public function publicShow(Request $request, Log $log): JsonResponse
|
||||
{
|
||||
$log->load(['round']);
|
||||
|
||||
if (! $this->hasOfficialResultsPublished($log->round)) {
|
||||
return response()->json([
|
||||
'message' => 'Detail logu bude dostupný po zveřejnění finálních výsledků.',
|
||||
], 403);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'id' => $log->id,
|
||||
'round_id' => $log->round_id,
|
||||
'tname' => $log->tname,
|
||||
'tdate' => $log->tdate,
|
||||
'pcall' => $log->pcall,
|
||||
'pband' => $log->pband,
|
||||
'psect' => $log->psect,
|
||||
'power_watt' => $log->power_watt,
|
||||
'sante' => $log->sante,
|
||||
'santh' => $log->santh,
|
||||
'stxeq' => $log->stxeq,
|
||||
'srxeq' => $log->srxeq,
|
||||
'claimed_qso_count' => $log->claimed_qso_count,
|
||||
'claimed_score' => $log->claimed_score,
|
||||
'claimed_wwl' => $log->claimed_wwl,
|
||||
'claimed_dxcc' => $log->claimed_dxcc,
|
||||
'round' => $log->round ? [
|
||||
'id' => $log->round->id,
|
||||
'contest_id' => $log->round->contest_id,
|
||||
'name' => $log->round->name,
|
||||
'start_time' => $log->round->start_time,
|
||||
'end_time' => $log->round->end_time,
|
||||
'logs_deadline' => $log->round->logs_deadline,
|
||||
] : null,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* QSO tabulka pro log: raw QSO + výsledky vyhodnocení + případné overrides.
|
||||
*/
|
||||
public function qsoTable(Request $request, Log $log): JsonResponse
|
||||
{
|
||||
$this->authorize('view', $log);
|
||||
|
||||
$evalRunId = $request->filled('evaluation_run_id')
|
||||
? (int) $request->get('evaluation_run_id')
|
||||
: null;
|
||||
@@ -341,4 +387,17 @@ class LogController extends BaseController
|
||||
'raw_header' => ['sometimes', 'nullable', 'string'],
|
||||
]);
|
||||
}
|
||||
|
||||
private function hasOfficialResultsPublished(?Round $round): bool
|
||||
{
|
||||
if (! $round || ! $round->official_evaluation_run_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return EvaluationRun::query()
|
||||
->where('id', $round->official_evaluation_run_id)
|
||||
->where('status', 'SUCCEEDED')
|
||||
->where('result_type', 'FINAL')
|
||||
->exists();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,16 @@ use Illuminate\Auth\Access\Response;
|
||||
|
||||
class LogPolicy
|
||||
{
|
||||
public function viewAny(User $user): bool
|
||||
{
|
||||
return (bool) $user->is_admin;
|
||||
}
|
||||
|
||||
public function view(User $user, Log $log): bool
|
||||
{
|
||||
return (bool) $user->is_admin;
|
||||
}
|
||||
|
||||
public function create(User $user): bool
|
||||
{
|
||||
return (bool) $user->is_admin;
|
||||
|
||||
Reference in New Issue
Block a user