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"
相关推荐
岳麓丹枫0011 小时前
PostgreSQL 中 pg_wal 目录里的 .ready .done .history 文件的生命周期
数据库·postgresql
陌上丨7 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
AI_56787 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
ccecw8 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH30738 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
数据知道8 小时前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
麦聪聊数据9 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务9 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
Goat恶霸詹姆斯11 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七11 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习