diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 9e1ad47..b9f6493 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -15,7 +15,7 @@ import { useAuthStore } from '@/stores/auth'
import StatusMessage from '@/components/StatusMessage.vue'
import ProfileView from '@/components/ProfileView.vue'
import LoadingView from '@/components/LoadingView.vue'
-import AuthRequiredMessage from '@/components/AuthRequiredMessage.vue'
+import AuthRequiredMessage from '@/components/AccessDenied.vue'
const store = useAuthStore()
const loading = ref(true)
@@ -106,6 +106,7 @@ function handleAuthMessage(event) {
hideAuthIframe()
loading.value = false
showBackMessage.value = true
+ store.showMessage('Authentication cancelled', 'info', 3000)
break
case 'auth-close-request':
diff --git a/frontend/src/admin/AdminApp.vue b/frontend/src/admin/AdminApp.vue
index 23d3126..70980fb 100644
--- a/frontend/src/admin/AdminApp.vue
+++ b/frontend/src/admin/AdminApp.vue
@@ -6,7 +6,7 @@ import UserBasicInfo from '@/components/UserBasicInfo.vue'
import RegistrationLinkModal from '@/components/RegistrationLinkModal.vue'
import StatusMessage from '@/components/StatusMessage.vue'
import LoadingView from '@/components/LoadingView.vue'
-import AuthRequiredMessage from '@/components/AuthRequiredMessage.vue'
+import AuthRequiredMessage from '@/components/AccessDenied.vue'
import AdminOverview from './AdminOverview.vue'
import AdminOrgDetail from './AdminOrgDetail.vue'
import AdminUserDetail from './AdminUserDetail.vue'
@@ -192,6 +192,15 @@ async function load() {
if (data.detail) throw new Error(data.detail)
info.value = data
authenticated.value = true
+
+ // Check if user has required permissions
+ if (data.authenticated && !(data.is_global_admin || data.is_org_admin)) {
+ // User is authenticated but lacks required permissions - show auth iframe
+ authStore.authRequired = true
+ loading.value = true
+ return
+ }
+
if (data.authenticated && (data.is_global_admin || data.is_org_admin)) {
await Promise.all([loadOrgs(), loadPermissions()])
}
@@ -360,6 +369,7 @@ function handleAuthMessage(event) {
hideAuthIframe()
loading.value = false
showBackMessage.value = true
+ authStore.showMessage('Authentication cancelled', 'info', 3000)
break
case 'auth-close-request':
@@ -576,10 +586,9 @@ async function submitDialog() {
-