过滤所有查询的数据

时间:2015-09-23 16:14:18

标签: java mysql spring jpa

我使用Spring和Mysql创建一个新的应用程序(但我可以相对自由地使用其他东西) 在此应用程序中,用户登录无法查看所有数据(用户'admin'除外)。 有一组树,用户在组中。用户只能看到其组(或后代组)的用户(或其他对象)。

我试图找到“优雅地”做到这一点的想法: 例如,如果我写:productDao.findAll(),它返回所有已经过滤的产品,而不是在所有DAO中重写所有请求。

如果它不存在,我接受所有的想法:重构数据库?改变其他数据库的mysql,不使用JPA,其他......或者可能是,我的方法错了,做那样的事情是个坏主意......

1 个答案:

答案 0 :(得分:2)

  1. 使用Spring Security 4.它也支持角色和层次角色
  2. 使用Spring Data JPA创建DAO。它与Spring Security 4集成
  3. 这是使用Spring Data JPA编写DAO的示例。你编写了界面,SDJ为你创建了这个类。

    public interface ProductRepository extends JpaRepository<Product, Long> {
    
        @Query("select e from #{#entityName} e where e.owner = ?#{principal?.username}")
        Page<Product> findAll(Pageable pageable);
    }
    

    实际上,您可以在Base Repository中执行此操作并对其进行扩展。

    您需要创建一个扩展EvaluationContextExtensionSupport的bean  工作?#{principal?.username}安全表达式