繁体   English   中英

如何在Olingo中将自定义属性添加到元模型?

[英]How to add custom attributes to the meta model in Olingo?

对于当前的项目,我们在休眠状态上使用Olingo,并使用picketlink来确保安全性和角色。

具有不同角色的用户将具有不同的权限,这会影响对某些属性的读/写访问。 考虑以下示例:

  • 一个具有“名称”,“地址”和“薪水”属性的实体“人”
  • 两个角色-“员工”和“经理”

虽然该员工应该可以编辑自己的地址,但是绝对不能允许他更改工资或其他人的地址。 尽管可能允许他查看自己的薪水以及其他用户的地址,但他甚至都不允许看到其他人的薪水,更不用说对其进行编辑了。 另一方面,管理器具有完全的读写权限。

这在后端不是问题-我们可以在其中使用自定义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。

我对这两个选项都不是很热衷,所以...寻求更好解决方案的任何提示仍然值得欢迎!

事实证明,这实际上非常容易。

Olingo将允许您通过实现JPAEdmExtension及其方法extendJPAEdmSchema来扩展架构。 在这里阅读更多有关它的信息

这应该可以帮助您,但是我将尝试在不久的将来提供一个示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM