Rumah  >  Soal Jawab  >  teks badan

Supabase - bersamaan dengan nilai tak terhingga

<p>Untuk aliran kebenaran, dalam perisian tengah, saya mahu memadankan sebarang nilai dalam penyataan <kod>.eq</code> Pengguna biasa hanya boleh melihat siaran yang dibuat oleh mereka sendiri. Pentadbir boleh melihat semua siaran. </p> <pre class="brush:js;toolbar:false;">const userMatcher = user.role === "admin" ? const {data: post } = tunggu supabase .dari("siaran") .select("*") .eq("id", id) .eq("userId", userMatcher) .single(); </pra> <p>Padanan "*" tidak mempunyai kesan di sini. Jika boleh, saya ingin memastikan kod ini bersih dan tidak menduplikasi pertanyaan (tolak pemadan pengguna) untuk kes pentadbir. </p> <p>Jika boleh, apakah cara yang paling bersih? </p>
P粉741223880P粉741223880432 hari yang lalu460

membalas semua(2)saya akan balas

  • P粉513316221

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

    Jawapan

    Michael Coxon adalah sempurna.

    Sebagai alternatif, anda boleh mencapai hasil yang serupa dengan gabungan berbilang 逻辑运算符.

    Cuba ini:

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

    Untuk pengguna admin: user.role === "admin", jadi syarat userId.eq.true sentiasa menilai kepada benar, membolehkan pengguna admin melihat semua siaran.

    Untuk pengguna lain: Condition userId.eq.{userId: user.id} mengehadkan pilihan kepada hanya siaran yang userIdnya sepadan dengan ID pengguna semasa.

    id.eq.${id} Memastikan siaran dengan id yang dinyatakan diambil semula.

    balas
    0
  • P粉670838735

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

    Hanya bahagikan pertanyaan. Anda tidak perlu melakukan semuanya dalam satu baris.

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

    balas
    0
  • Batalbalas