sql - 限制关系数据库中的用户可以编辑哪些行
问题描述
我已经建立了一个 Postgresql 数据库,其中包含用户、业务、活动和凭证表
每个凭证都有一个父 Campaign,每个 Campaign 都有一个父业务,每个用户可以属于一个或多个通过 business_user FK 表链接的业务。
如何阻止用户更改不属于他所属企业的行?我使用 jwts 来管理会话,它们存储用户 ID。
我是否使用内部联接?但是,我该如何处理多对多的业务和用户关系呢?
解决方案
为了展示我需要引用列的技术,所以我做出以下假设:
- 每个表都有一个列ID,这个列被定义为PK。
- 每个表都有适当的外键列和名称作为 RefTable _id
- 每个表都有一个非键列 COL。
然后,该技术适用于(并且存在选择...),其中选择遵循 FK 链到业务,从正在更新的表和从 business_user 到业务。所以更新凭证变成:
update voucher vch
set col = '...'
where vch.id = &vid
and exists
( select null
from campaign camp
join business bus on bus.id = camp.business_id
join business_user bu on bu.business_id = bus.id
where camp.id = vch.campaign_id
and bu.user_id = &uid
);
其中 &vid 和 &uid 分别用于 vouhcer.id 和 user.id。
推荐阅读
- shell - 在 Unix Shell 脚本函数中返回负数
- angular - ASP.NET Core + Angular 无法启动
- java - 如何在 weblogic 上部署 Spring Boot 应用程序?
- php - 如何修复 php-gd 无法安装 debian
- ecmascript-6 - 有没有办法防止来自 light dom 中的开槽元素的事件通过 shadow dom 传播?
- javascript - 找不到模块(尝试从文件夹加载模块)
- javascript - 从 Cloud Function 中的 firebase 存储下载时出错
- python - 仅使用 getvalueofnode(node.find()) 在 pandas Dataframe 中获取第一行
- lstm - GridSearch 期间的 EarlyStopping 不会停止 LSTM 训练
- eclipse - 在 Eclipse 中:如何为新的服务器运行时设置默认 VM 参数?