如何限制域限制数据的更新?
假设我有我的hibernate应用程序的用户,允许查看特定国家/地区的所有合同(即过滤器:country ='US')
如何确保此用户只能使用country ='US'插入新记录?
在hibernate中是否存在类似'限制更新语句的过滤器'的内容?
答案 0 :(得分:1)
一个选项是在DAO中处理检查,例如:
public void saveContract(Contract contract, String countryCode) {
if (contract.getCountryCode().equals(countryCode)) {
threw InvalidContractException
} else {
saveContract(contract) }
private void saveContract(Contract contract)
我认为不能以声明方式检查它。
如果用户在数据库级别进行身份验证,即。每个应用程序用户拥有自己的db用户,然后就可以创建表
db_user,ctry
并使用?!
在合同映射中引用此表或者您可以使用虚拟专用数据库
答案 1 :(得分:1)
您可以通过实现PreUpdateListener / PreInsertListener 并在否决更新的情况下在Hibernate层执行此操作,但在大多数情况下这可能会过度杀死。
我只会这样做,如果这对于安全原因至关重要,并且除了验证逻辑之外还有更接近View或Controller层的。你没有提到它是什么类型的应用程序,但几乎所有的UI框架(web,桌面或移动)都有验证支持,这将使处理这种逻辑更方便(而不是处理持久层的异常) )。