postgresql内的RLS规则

来源

https://chatgpt.com/share/6969eb21-0e50-8006-b6f3-6b9413d3be7a

RLS安全,设置用户和某个特定人可以进行修改

复制代码
using (
  user_id = auth.uid()
)
上述代码中,除了user_id = auth.uid(),我还想加入user_id='1922d5ca-aa33-4abc-9759-6ccb05d6b533'也可以查询数据,该怎么做?

注意细节:user_id=auth.uid()与auth.uid()='xxx-xxx-xxx-xxx'的区别

复制代码
using (
  auth.uid() = user_id
  or auth.uid() = '19c8d5ca-7233-4abc-9759-6dbb05d6b570'
);
代表已登录的用户自己与某个管理员可以得到结果

using (
  user_id = auth.uid()
  or user_id = '19aad5ca-7cc3-4ddc-9129-6db215fdb510'
);
如果是select语句,意味着仅仅能查询到自己与'19aad5-xxx'的记录
不是管理员可以查询到所有数据的功能

下面这个公式很重要,核心观点

最终推荐完整版(UPDATE 场景)

复制代码
alter policy "owner or system user"
on your_table
for update
to public
using (
  user_id = auth.uid()
  or user_id = '19c8d5ca-7233-4abc-9759-6dbb05d6b570'::uuid
)
with check (
  user_id = auth.uid()
  or user_id = '19c8d5ca-7233-4abc-9759-6dbb05d6b570'::uuid
);

using()与with check()的区别是什么?

普通用户只能看自己,管理员可以看所有

select

update/delete

某个role才能insert

复制代码
 const { data: { session }, error } = await supabase.auth.getSession()
        console.log('🟩 🟩 🟩 user', session);
//session.user.role就有"limited_user"
相关推荐
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏5 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐5 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再5 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest5 天前
数据库SQL学习
数据库·sql
jnrjian5 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle