[数据库设计]如何防止不同公司间,交叉请求的问题?

Mr_Po 发布于 2017/06/24 16:17
阅读 127
收藏 0

公司表(company)

id
name
...

客户表(customer)
id
name
score        积分
company_id    客户所属哪个公司,外键公司表id
...

PS:每个公司只能操作自己的客户

现·表数据:
company表
id    name
--------------
1    公司A
2    公司B

customer表
id    name    score    company_id
----------------------------------
1    客户A    100    1
2    客户B    100    2

服务器收到一个这样的请求:
修改id为1的客户的积分为50,发起该请求的公司的id为2;

也就是说,【公司B】妄图修改【公司A】的客户的积分;

服务器应该怎样防止这样的操作呢?

我目前能够想到的解决方案是,使用AOP切一下。
即:在执行操作前,判断操作的客户id是否属于请求发起公司。

---------------------------------------

但是现在又有新的变故。

礼品表(gift)
id
name
company_id    礼品所属哪个公司,外键公司表id
...

礼品与客户的关联表(gift_customer_link)
id
gift_id        礼品编号,外键关联礼品表id
customer_id    客户编号,外键关联客户表id

现·表数据:
gift表
id    name    company_id
-------------------
1    礼品A    1

服务器又收到这样一个请求:
将id为1的礼品,送给id为2的客户,发起该请求的公司id为2;

也就是说,【公司B】妄图将【公司A】的礼品送给自己的客户;

那么这种情况又该如何防御呢?

难道又切一层,再判断一下礼品id是否属于操作公司?

---------------------------------------------

如果还有一个活动表(celebration),要求也是,公司只能终止自己发布的活动,客户也只能参与所属公司的活动。
那么如何防止,不同公司间的客户交叉参与活动呢?

是我的数据库设计本身存在问题吗?

加载中
0
护士的小黄瓜
护士的小黄瓜

通过URL地址隔离数据,   /公司名/业务模块/业务ID

M
Mr_Po
额...,可以说得详细一点吗?
0
DeMoNHaDeS
DeMoNHaDeS

1、修改积分时把客户查出来在修改,查的时候加公司的条件。

2、修改礼品时类似。

0
l
liun

这就是为什么不用自增id的原因。若你的id是自增的,客户端可以猜测到一个id来操作;若不是自增的,A公司只能看到它自己的员工和礼品,猜测出来的礼品基本上是不可能存在的就不会出现这种问题。

返回顶部
顶部