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
相关产品推荐
相关产品推荐

