2015-04-24 30 views
1

对于当前的项目,我们在休眠状态下使用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。

我并不热衷于这两种选择,所以......任何提示更好的解决方案的提示仍然会比欢迎!

回答

-1

原来它实际上是非常容易

Olingo将允许您通过实现JPAEdmExtension及其方法extendJPAEdmSchema来扩展模式。阅读更多关于here

这应该让你走,但我会尽力在不久的将来提供一个例子。

相关问题