Supabase - 等价于无限价值
P粉741223880
P粉741223880 2023-08-15 18:53:11
0
2
432

对于授权流程,在中间件中,我想要在.eq语句中匹配任何值。普通用户只能看到自己创建的帖子。管理员可以看到所有帖子。

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

在这里匹配"*"是不起作用的。如果可能的话,我希望保持这段代码的整洁,而不是为管理员情况重复查询(减去用户匹配器)。

如果有可能,最干净的方法是什么?

P粉741223880
P粉741223880

全部回复 (2)
P粉513316221

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的帖子。

    P粉670838735

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

    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();
      最新下载
      更多>
      网站特效
      网站源码
      网站素材
      前端模板
      关于我们 免责声明 Sitemap
      PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!