Heim  >  Fragen und Antworten  >  Hauptteil

Supabase – entspricht einem unendlichen Wert

<p>Für den Autorisierungsfluss möchte ich in der Middleware einen beliebigen Wert in der <code>.eq</code>-Anweisung abgleichen. Normale Benutzer können nur von ihnen selbst erstellte Beiträge sehen. Administratoren können alle Beiträge sehen. </p> <pre class="brush:js;toolbar:false;">const userMatcher = user.role === "admin" ? "*" : user.id; const { data: post } = supabase erwarten .from("Beiträge") .wählen("*") .eq("id", id) .eq("userId", userMatcher) .einzel(); </pre> <p>Die Übereinstimmung mit „*“ hat hier keine Auswirkung. Wenn möglich, möchte ich diesen Code sauber halten und die Abfrage (abzüglich des Benutzer-Matchers) für den Admin-Fall nicht duplizieren. </p> <p>Wenn möglich, was ist der sauberste Weg? </p>
P粉741223880P粉741223880432 Tage vor461

Antworte allen(2)Ich werde antworten

  • P粉513316221

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

    Michael Coxon的回答是完美的。

    或者,您可以通过多个逻辑运算符的组合来实现类似的结果。

    尝试这样做:

    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();

    对于管理员用户:user.role === "admin",因此条件userId.eq.true始终评估为true,允许管理员用户查看所有帖子。

    对于其他用户:条件userId.eq.{userId: user.id}限制了选择只有userId与当前用户的ID匹配的帖子。

    id.eq.${id}确保检索到指定id的帖子。

    Antwort
    0
  • P粉670838735

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

    只需将查询拆分。您不需要在一行中完成所有操作。

    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();

    Antwort
    0
  • StornierenAntwort