我有一个具有GUID作为项的项的表列表,也有项所属的customerId,我想在行级别应用安全性,在该级别中,更新行的每个命令都应具有正确的CustomerId。在这种情况下,我不想先获取项目并检查它是否属于试图更新该行然后将更新发送到表的客户。 我认为可以拦截和更新where子句,可以将CustomerId添加到生成的查询中。 如果不是这样,将CustomerId作为密钥的一部分是一种好习惯吗(在生成的更新中添加CustomerId的一种变通方法)?还有其他解决方法吗?
答案 0 :(得分:1)
假设您可以这样做,并且该命令将使您知道记录未更新。您怎么知道为什么 没有更新?可能是找不到ID,或者是您的条件未授权用户。对于Web请求,这是“ 404未找到”和“ 403禁止响应”之间的区别(记录日志很重要,因为您想知道某人是否正在尝试使用不是他们的数据,是吗?)。
始终总是加载实体的另一种方法是在一段时间内缓存相关数据(按类型和PK值索引,CustomerID
的有效载荷索引),然后检查缓存以比较{{1} }属性(当请求更新时)。如果缓存中不存在实体,则必须加载它,但是如果您使用相同的服务/应用来获取和更新实体,则缓存中大部分时间应该包含相关数据。当然,只有在您不希望数据库中的CustomerID
发生变化时,这才起作用。