Supabase 中基于角色的身份验证

Yas*_*ash 3 supabase supabase-database

我正在尝试在 supabase 中制定策略,其中具有管理员角色的用户只能获取角色为“代理”的员工列表

有一个“用户”表,我正在尝试添加以下策略

"(auth.email() in (select users.email from users where users.role = 'admin')) and (role = 'agent')
Run Code Online (Sandbox Code Playgroud)

用户表有以下列

名字 | 姓氏 | 角色 | 电子邮件 | 密码

但是我收到了 Infinite recursion on users table 消息。

我如何在这里创建基于角色的策略?提前致谢!

小智 6

在对将设置 RLS 的表进行查询时,这是一个已知问题,因为策略查找也受策略约束。您需要将查询移至安全定义器函数中并调用策略中的函数以避免无限递归。

CREATE OR REPLACE FUNCTION admin_only(email string)
  returns boolean AS
$$
  EXISTS (select users.email from users 
  where users.role = 'admin'
  and users.email = email)
$$ stable language sql security definer;
Run Code Online (Sandbox Code Playgroud)

然后在您的策略中添加

admin_only(auth.email())
Run Code Online (Sandbox Code Playgroud)

我对您尝试应用的策略有点困惑,因为您正在检查是否是,users.roleadmin同时您也在检查是否也是roleagent这是否意味着可以为用户分配多个角色?