You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supabase管理员用户查询全部public.users记录的问题求助

解决方案

你的需求完全可以实现,问题出在RLS策略的逻辑上——你当前的策略是判断单条用户记录是否满足「是当前用户」或「该记录的用户是管理员」,这会导致管理员只能看到自己和其他管理员,无法获取普通用户的记录。

修正后的RLS策略

需要调整策略逻辑,改为判断当前登录用户是否是管理员,而不是单条记录的用户是否是管理员:

CREATE POLICY "Admin can view all users; regular users can view themselves"
ON public.users
FOR SELECT
USING (
  -- 普通用户只能查看自己的记录
  auth.uid() = id
  -- 管理员可以查看所有记录
  OR (SELECT is_admin FROM public.users WHERE id = auth.uid()) = TRUE
);

额外注意事项

  • 确保public.users表已启用行级安全:
ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
  • 如果你之前的策略还存在,建议先删除旧策略避免冲突:
DROP POLICY IF EXISTS "Select_By_User" ON public.users;

代码验证

你的JavaScript代码无需修改,当登录用户的is_admin为true时,调用getAllUsers()会返回public.users表的所有记录;普通用户调用则只会返回自己的记录。

内容的提问来源于stack exchange,提问作者Ribs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:07:08