gpt4 book ai didi

java - 如何在 Olingo 中向元模型添加自定义属性?

转载 作者:行者123 更新时间:2023-12-01 06:13:34 25 4
gpt4 key购买 nike

对于当前的项目,我们在 hibernate 之上使用 Olingo,并使用 picketlink 来实现安全性和角色。

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

  • 一个实体“Person”,具有“name”、“address”和“salary”属性
  • 两种角色 - “员工”和“经理”

虽然员工应该能够编辑自己的地址,但当然不能允许他更改自己的工资或其他人的地址。虽然他可能被允许查看自己的工资,也许还有其他用户的地址,但他甚至不被允许查看其他人的工资,更不用说编辑它了。另一方面,经理拥有完全的读写权限。

这在后端不是问题 - 我们可以使用自定义 bean 验证来强制执行写入权限。

但我希望前端能够反射(reflect)用户的权利 - 例如通过禁用“工资”文本字段或首先不显示它。

为此,我想将基于用户权限的自定义属性引入到 oData 元模型中。而不是

<Property Name="Address" Type="Edm.String" Nullable="false"/>

我想收到

<Property Name="Address" Type="Edm.String" Nullable="false" Mode="readwrite"/>

或者具有相同效果的东西。

所以问题是:如何使用 Olingo 将自定义属性引入到我的 oData 元模型中?

请不要把上面的例子看得太严重。我确实意识到,简单地告诉界面不要通过元模型显示其他人的工资本质上是不安全的;)

更新:

好吧,这并不容易。我现在意识到了。我之前提到的属性在 CDSL 中称为“facet” (oData 所依赖的(双关语))并且事实证明,存在一组固定的方面类型。因此,Olingo 在这里不太关心抽象,您会发现很多硬编码的东西。我想仍然可以添加另一种面类型,但这需要在很多地方触摸 Olingo。而且它将消除与 CDSL/oData 的一致性 - 我不太关心这一点,但这可能解释了问题缺乏解决方案。

目前看来,我必须尝试引入另一个方面,或者拦截并修改传出的 xml。

我对这两种选择都不感兴趣,所以...任何有关更好解决方案的提示仍然非常受欢迎!

最佳答案

事实证明这实际上非常简单。

Olingo 将允许您通过实现 JPAEdmExtension 及其方法extendJPAEdmSchema 来扩展架构。了解更多相关信息 here .

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

关于java - 如何在 Olingo 中向元模型添加自定义属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29857514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com