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"
相关推荐
不像程序员的程序媛3 小时前
系统cpu内存负载资源分析
运维·服务器·数据库
Jane Chiu4 小时前
Oracle DBMS_REDEFINITION(在线重定义)
数据库·oracle·分区表
全栈前端老曹5 小时前
【MongoDB】安全与权限管理 —— 用户认证、角色权限、SSL 加密
前端·javascript·数据库·安全·mongodb·nosql·ssl
怕孤单的草丛5 小时前
缓存管理面临的主要问题
java·数据库·缓存
我会尽全力 乐观而坚强6 小时前
MySQL零基础入门(二)
数据库·mysql·adb
kali-Myon7 小时前
某校园门禁系统高危 SQL 注入漏洞挖掘复盘
数据库·sql·安全·web安全
程序员在囧途8 小时前
likeadmin-api API 中转站怎么做统一报价?从 /pricing、/user/balance 到 task_id 回执的落地方法
运维·服务器·数据库·likeadmin-api·api中转站·token计费
龙石数据8 小时前
MySQL 全量同步到 Hive 怎么做?三步配置教程
数据库·hive·mysql·数据治理·数据中台
程序员在囧途9 小时前
likeadmin-api API 算力超市怎么做供应商切换?统一鉴权、task_id 和 callback_url 才能稳交付
java·服务器·数据库·开放api·likeadmin-api·api算力超市