首页 > 解决方案 > 限制关系数据库中的用户可以编辑哪些行

问题描述

我已经建立了一个 Postgresql 数据库,其中包含用户、业务、活动和凭证表

每个凭证都有一个父 Campaign,每个 Campaign 都有一个父业务,每个用户可以属于一个或多个通过 business_user FK 表链接的业务。

如何阻止用户更改不属于他所属企业的行?我使用 jwts 来管理会话,它们存储用户 ID。

我是否使用内部联接?但是,我该如何处理多对多的业务和用户关系呢?

标签: sqlnode.jspostgresqlexpress

解决方案


为了展示我需要引用列的技术,所以我做出以下假设:

  • 每个表都有一个列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。


推荐阅读