Admin: Super Admin can bypass the 7-day AI analysis restriction

This commit is contained in:
jeremy bayse
2026-04-16 18:55:53 +02:00
parent 84a9c6bb14
commit c4ab5c97b2
2 changed files with 20 additions and 2 deletions

View File

@@ -23,7 +23,10 @@ class AIAnalysisController extends Controller
} }
// Restriction: Une analyse tous les 7 jours maximum par candidat // Restriction: Une analyse tous les 7 jours maximum par candidat
if ($candidate->ai_analysis && isset($candidate->ai_analysis['analyzed_at'])) { // Le super_admin peut outrepasser cette restriction via le paramètre 'force'
$shouldCheckRestriction = !($request->force && auth()->user()->isSuperAdmin());
if ($shouldCheckRestriction && $candidate->ai_analysis && isset($candidate->ai_analysis['analyzed_at'])) {
$lastAnalysis = Carbon::parse($candidate->ai_analysis['analyzed_at']); $lastAnalysis = Carbon::parse($candidate->ai_analysis['analyzed_at']);
if ($lastAnalysis->diffInDays(now()) < 7) { if ($lastAnalysis->diffInDays(now()) < 7) {
return response()->json([ return response()->json([

View File

@@ -248,6 +248,7 @@ watch(
const aiAnalysis = ref(props.candidate.ai_analysis || null); const aiAnalysis = ref(props.candidate.ai_analysis || null);
const isAnalyzing = ref(false); const isAnalyzing = ref(false);
const selectedProvider = ref(props.ai_config?.default || 'ollama'); const selectedProvider = ref(props.ai_config?.default || 'ollama');
const forceAnalysis = ref(false);
// Error Modal state // Error Modal state
const showErrorModal = ref(false); const showErrorModal = ref(false);
@@ -263,7 +264,8 @@ const runAI = async () => {
isAnalyzing.value = true; isAnalyzing.value = true;
try { try {
const response = await axios.post(route('admin.candidates.analyze', props.candidate.id), { const response = await axios.post(route('admin.candidates.analyze', props.candidate.id), {
provider: selectedProvider.value provider: selectedProvider.value,
force: forceAnalysis.value
}); });
aiAnalysis.value = response.data; aiAnalysis.value = response.data;
} catch (error) { } catch (error) {
@@ -630,6 +632,19 @@ const runAI = async () => {
</button> </button>
</div> </div>
<!-- Force option for Super Admin -->
<div v-if="$page.props.auth.user.role === 'super_admin'" class="flex items-center gap-2 px-4 py-2 bg-red-50 dark:bg-red-900/20 border border-red-100 dark:border-red-900/50 rounded-xl">
<input
type="checkbox"
id="forceAnalysis"
v-model="forceAnalysis"
class="rounded border-red-300 text-red-600 focus:ring-red-500/20 w-4 h-4 cursor-pointer"
/>
<label for="forceAnalysis" class="text-[10px] font-black uppercase tracking-widest text-red-600 cursor-pointer select-none">
Forcer (Bypass 7 jours)
</label>
</div>
<PrimaryButton <PrimaryButton
@click="runAI" @click="runAI"
:disabled="isAnalyzing" :disabled="isAnalyzing"