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

标签 java hibernate odata olingo

对于当前的项目,我们在 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/

相关文章:

c# - 在 OData 中提供 DateTime 值

c# - 由于包装器,使用 $expand 的 OData 中断了强制转换操作

java - 将退出代码从 ant 返回到批处理文件

java - Camel 的重新投递政策

java - 批量插入时出现 TemporaryFailureException

java - 如何从 hibernate 中的日期类型列中读取空值

java - 在Java中从具有不同大小的2个数组列表中查找不相似的元素

postgresql - 如果列类型是使用 JPA 的 JSONB,如何将 JSON 字符串存储到 PostgreSQL 中?

java - Spring Data JPA ManyToOne 双向

带有跳过和顶部的 OData 分页 - 如何知道没有更多数据?