Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于DSL的数据过滤_Java_Sql_Hibernate_Dsl - Fatal编程技术网

Java 基于DSL的数据过滤

Java 基于DSL的数据过滤,java,sql,hibernate,dsl,Java,Sql,Hibernate,Dsl,我们的是特定于某个领域的产品。以下是一些典型的安全用例 普通用户只能编辑其个人资料数据或基于权限的任何人数据 一个用户只能看到属于其部门的数据,而另一个用户可以看到来自所有部门的数据 这些需求随着客户的不同而变化,因此我们不能在应用程序代码中硬编码过滤逻辑,也不能维护应用程序的多个版本 我们使用基于Hibernate标准的过滤,并喜欢根据与权限相关联的一些表达式添加额外的限制。上面提到的用例1的表达式可能如下所示,'userId=user.userId',其中'user'是一个关键字,表示当前经

我们的是特定于某个领域的产品。以下是一些典型的安全用例

  • 普通用户只能编辑其个人资料数据或基于权限的任何人数据
  • 一个用户只能看到属于其部门的数据,而另一个用户可以看到来自所有部门的数据
  • 这些需求随着客户的不同而变化,因此我们不能在应用程序代码中硬编码过滤逻辑,也不能维护应用程序的多个版本

    我们使用基于Hibernate标准的过滤,并喜欢根据与权限相关联的一些表达式添加额外的限制。上面提到的用例1的表达式可能如下所示,
    'userId=user.userId'
    ,其中'user'是一个关键字,表示当前经过身份验证的用户,'userId'是为其创建条件的对象的属性

    我们想要定义一个dsl,使用它我们可以导出sql的条件限制以及where子句

    是否有任何现有的框架可以让我们做到这一点,而不必使用dsl?基于上面提到的用例,您认为它可以以不同的方式实现吗


    附加信息:我们只定义带有一些元信息的域对象来生成UI。持久性、安全性等由我们的核心框架负责。

    您测试过Hibernate过滤器吗? 它们是记录级过滤的好机制,您可以在每个实体上定义多个过滤器(例如,针对您的案例定义两个过滤器),并根据当前用户启用或禁用它们。 应说明过滤器可以接受参数(例如您当前的用户id)

    我们在一个大型项目中使用了Hibernate3的这一伟大特性,该项目有一个分层的组织单元,并且运行良好


    顺便说一下,如果使用Oracle作为数据库,请考虑Oracle的虚拟专用数据库特性。 我们决定使用antlr使用我们自己的dsl

    Amir,我知道Hibernate过滤器,但它不适合我们的需要。谢谢你的建议。