Maison  >  Questions et réponses  >  le corps du texte

Supabase - équivalent à une valeur infinie

<p>Pour le flux d'autorisation, dans le middleware, je souhaite faire correspondre n'importe quelle valeur dans l'instruction <code>.eq</code> Les utilisateurs ordinaires ne peuvent voir que les publications créées par eux-mêmes. Les administrateurs peuvent voir toutes les publications. </p> <pre class="brush:js;toolbar:false;">const userMatcher = user.role === "admin" "*" : user.id; const { data: post } = wait supabase .from("messages") .sélectionner("*") .eq("identifiant", identifiant) .eq("IDutilisateur", userMatcher) .célibataire(); ≪/pré> <p>La correspondance de "*" n'a aucun effet ici. Si possible, j'aimerais garder ce code propre et ne pas dupliquer la requête (moins le correspondant d'utilisateur) pour le cas d'administration. </p> <p>Si possible, quelle est la méthode la plus propre ? </p>
P粉741223880P粉741223880432 Il y a quelques jours465

répondre à tous(2)je répondrai

  • P粉513316221

    P粉5133162212023-08-16 16:57:09

    La réponse de

    Michael Coxon est parfaite.

    Vous pouvez également obtenir des résultats similaires en combinant plusieurs 逻辑运算符.

    Essayez ceci :

    const userMatcher = user.role === "admin" ? true : { userId: user.id };
    
    const { data: post } = await supabase
      .from("posts")
      .select("*")
      .or(`userId.eq.${userMatcher}`, "id.eq." + id)
      .single();

    Pour les utilisateurs administrateurs : user.role === "admin", donc la condition userId.eq.true est toujours évaluée à true, permettant aux utilisateurs administrateurs de voir tous les messages.

    Pour les autres utilisateurs : Condition userId.eq.{userId: user.id} limite la sélection aux seules publications dont l'userId correspond à l'ID de l'utilisateur actuel.

    id.eq.${id} Garantit que la publication avec l'identifiant spécifié est récupérée.

    répondre
    0
  • P粉670838735

    P粉6708387352023-08-16 09:09:46

    Divisez simplement la requête. Vous n'êtes pas obligé de tout faire sur une seule ligne.

    let query = supabase
        .from("posts")
        .select("*")
        .eq("id", id);
    
    
    if(user.role === "admin"){
        query = query.eq("userId", user.id)
    }
    
    
    const { data: post } = await query.single();

    répondre
    0
  • Annulerrépondre