🔒 Enhance developer tools access control with JWT and Discord OAuth permissions

This commit is contained in:
2026-01-30 05:47:50 +00:00
parent 70ad4a82fa
commit 8776d645a5

View File

@@ -120,21 +120,40 @@
<script setup> <script setup>
import { ref, computed, onMounted, onUnmounted } from 'vue'; import { ref, computed, onMounted, onUnmounted } from 'vue';
import { useAuth } from '../composables/useAuth.js';
import { useDiscordOAuth } from '../composables/useDiscordOAuth.js';
import { useFeatureFlags } from '../composables/useFeatureFlags.js'; import { useFeatureFlags } from '../composables/useFeatureFlags.js';
const { user } = useAuth();
const discord = useDiscordOAuth();
const { const {
getFlags, getFlags,
toggle: toggleFlagOverride, toggle: toggleFlagOverride,
resetAll: resetAllOverrides, resetAll: resetAllOverrides
isEnabled
} = useFeatureFlags(); } = useFeatureFlags();
const isOpen = ref(false); const isOpen = ref(false);
// Always show in development mode, otherwise only if enabled via feature flag // Show only for:
// 1. Development mode
// 2. JWT authenticated users with developer_tools.view permission
// 3. Discord authenticated users with developer_tools.view permission
const isAvailable = computed(() => { const isAvailable = computed(() => {
return process.env.NODE_ENV === 'development' || isEnabled('developer-tools'); const isDev = process.env.NODE_ENV === 'development';
// Check JWT auth permissions
const hasJwtPermission = user.value?.permissions?.includes(
'developer_tools.view'
);
// Check Discord OAuth permissions
const hasDiscordPermission = discord.hasDevAccess();
const hasPermission = hasJwtPermission || hasDiscordPermission;
return isDev || hasPermission;
}); });
const nodeEnv = computed(() => process.env.NODE_ENV || 'unknown'); const nodeEnv = computed(() => process.env.NODE_ENV || 'unknown');
const appVersion = computed( const appVersion = computed(
() => import.meta.env.VITE_APP_VERSION || '1.0.0-dev' () => import.meta.env.VITE_APP_VERSION || '1.0.0-dev'
@@ -160,7 +179,7 @@ const resetAll = () => {
} }
}; };
// Keyboard shortcut: Ctrl+Shift+D // Keyboard shortcut: Ctrl+Shift+D (only works if user has access)
const handleKeyDown = e => { const handleKeyDown = e => {
if (e.ctrlKey && e.shiftKey && e.code === 'KeyD') { if (e.ctrlKey && e.shiftKey && e.code === 'KeyD') {
e.preventDefault(); e.preventDefault();