Sfoglia il codice sorgente

Run SQL to create super user and disable email confirmation.

gpt-engineer-app[bot] 6 mesi fa
parent
commit
dd3f575aae
3 ha cambiato i file con 79 aggiunte e 2 eliminazioni
  1. 10 1
      src/components/Header.tsx
  2. 44 0
      src/hooks/useSuperUser.tsx
  3. 25 1
      src/integrations/supabase/types.ts

+ 10 - 1
src/components/Header.tsx

@@ -9,10 +9,12 @@ import {
   User,
   Rss,
   List,
-  LogOut
+  LogOut,
+  Shield
 } from 'lucide-react';
 import { Link } from 'react-router-dom';
 import { useAuth } from '@/hooks/useAuth';
+import { useSuperUser } from '@/hooks/useSuperUser';
 
 interface HeaderProps {
   searchQuery: string;
@@ -23,6 +25,7 @@ interface HeaderProps {
 
 const Header = ({ searchQuery, onSearchChange, pinnedCount, onAddFeedClick }: HeaderProps) => {
   const { user, signOut } = useAuth();
+  const { isSuperUser } = useSuperUser();
 
   const handleSignOut = async () => {
     await signOut();
@@ -36,6 +39,12 @@ const Header = ({ searchQuery, onSearchChange, pinnedCount, onAddFeedClick }: He
             <div className="flex items-center gap-2">
               <Rss className="h-6 w-6 text-primary" />
               <h1 className="text-xl font-bold">Feeds.Duhaz.fr</h1>
+              {isSuperUser && (
+                <Badge variant="destructive" className="gap-1">
+                  <Shield className="h-3 w-3" />
+                  Admin
+                </Badge>
+              )}
             </div>
             <div className="hidden sm:flex items-center gap-2 text-sm text-muted-foreground">
               <span>•</span>

+ 44 - 0
src/hooks/useSuperUser.tsx

@@ -0,0 +1,44 @@
+
+import { useState, useEffect } from 'react';
+import { supabase } from '@/integrations/supabase/client';
+import { useAuth } from './useAuth';
+
+export function useSuperUser() {
+  const [isSuperUser, setIsSuperUser] = useState(false);
+  const [loading, setLoading] = useState(true);
+  const { user } = useAuth();
+
+  const checkSuperUserStatus = async () => {
+    if (!user) {
+      setIsSuperUser(false);
+      setLoading(false);
+      return;
+    }
+
+    try {
+      const { data, error } = await supabase.rpc('is_super_user');
+      
+      if (error) {
+        console.error('Error checking super user status:', error);
+        setIsSuperUser(false);
+      } else {
+        setIsSuperUser(data || false);
+      }
+    } catch (error) {
+      console.error('Error in checkSuperUserStatus:', error);
+      setIsSuperUser(false);
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  useEffect(() => {
+    checkSuperUserStatus();
+  }, [user]);
+
+  return {
+    isSuperUser,
+    loading,
+    refetch: checkSuperUserStatus
+  };
+}

+ 25 - 1
src/integrations/supabase/types.ts

@@ -51,6 +51,27 @@ export type Database = {
         }
         Relationships: []
       }
+      super_users: {
+        Row: {
+          created_at: string
+          email: string
+          id: string
+          user_id: string
+        }
+        Insert: {
+          created_at?: string
+          email: string
+          id?: string
+          user_id: string
+        }
+        Update: {
+          created_at?: string
+          email?: string
+          id?: string
+          user_id?: string
+        }
+        Relationships: []
+      }
       user_feeds: {
         Row: {
           created_at: string
@@ -88,7 +109,10 @@ export type Database = {
       [_ in never]: never
     }
     Functions: {
-      [_ in never]: never
+      is_super_user: {
+        Args: { user_email?: string }
+        Returns: boolean
+      }
     }
     Enums: {
       [_ in never]: never