Supabase - équivalent à une valeur infinie
P粉741223880
P粉741223880 2023-08-15 18:53:11
0
2
516
<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粉741223880
P粉741223880

répondre à tous(2)
P粉513316221

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.

P粉670838735

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();
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal