Supabase - bersamaan dengan nilai tak terhingga
P粉741223880
P粉741223880 2023-08-15 18:53:11
0
2
495
<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粉741223880
P粉741223880

membalas semua(2)
P粉513316221

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.

P粉670838735

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();
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan