对于当前的项目,我们在休眠状态下使用Olingo,在安全性和角色上使用picketlink。如何将自定义属性添加到Olingo中的元模型?
具有不同角色的用户将具有不同的权限,这会影响对某些属性的读/写访问权限。请看下面的例子:
- 一个实体“人”与属性“姓名”,“地址”和“工资”
- 两个角色 - “雇员”和“经理人”
虽然该员工应该能够编辑自己的地址,他当然不能改变他的薪水或其他人的地址。虽然他可能会被允许看到自己的薪水,也可能是其他用户的地址,但他不会被允许看到其他人的薪水,更不用说编辑它了。另一方面,经理拥有完整的读写权限。
这不是后端问题 - 我们可以在那里使用自定义bean验证来强制执行写入权限。
但我希望前端能够反映用户权限 - 例如通过禁用“薪水”文本字段或通过不首先显示它。
为此,我想根据用户权限将自定义属性引入到oData元模型中。取而代之的
<Property Name="Address" Type="Edm.String" Nullable="false"/>
我想收到
<Property Name="Address" Type="Edm.String" Nullable="false" Mode="readwrite"/>
或者其他类似的同样的效果。
所以问题是:我如何使用Olingo将自定义属性引入到oData元模型中?
请不要拿上面的例子太严肃。我不知道,只是告诉接口好心不是通过元模型向人展示的工资本质上是不安全;)
更新:
好吧,它不是那么容易的。我现在意识到了。我前面提到的属性在CDSL(其中的oData依赖(双关语))中被称为“方面”),事实证明,有一组固定的方面类型。因此,Olingo不会在这里抽象化,你会发现许多硬编码的东西。我想还是可以添加另一个方面类型,但是这需要在很多地方触摸Olingo。这将消除与CDSL/oData的一致性 - 我不太关心它,但这可能解释了缺少解决方案的问题。
现在看来我不得不尝试引入另一个方面,或拦截和修改传出的XML。
我并不热衷于这两种选择,所以......任何提示更好的解决方案的提示仍然会比欢迎!