我用 Spring 和 Mysql 创建了一个新的应用程序(但我相对自由地使用其他东西) 在此应用程序中,用户登录不能看到所有数据(用户“admin”除外)。 群有一棵树,用户在群里。一个用户只能看到他的组(或后代组)的用户(或其他对象)。
我试图找到“优雅”地做到这一点的想法: 例如,如果我写:productDao.findAll(),它会返回所有已过滤的产品,而无需重写所有 DAO 中的所有请求。
如果不存在,我接受各种想法:重构数据库?为其他数据库更改 mysql,不使用 JPA,其他...或者可能是,我走错了路,做这样的事情是个坏主意...
最佳答案
- 使用 Spring Security 4。它也支持角色和分层角色
- 使用 Spring Data JPA 创建您的 DAO。它与 Spring Security 4 集成
这是使用 Spring Data JPA 编写 DAO 的示例。您编写接口(interface),SDJ 为您创建类。
public interface ProductRepository extends JpaRepository<Product, Long> {
@Query("select e from #{#entityName} e where e.owner = ?#{principal?.username}")
Page<Product> findAll(Pageable pageable);
}
实际上,您会在基础存储库中执行此操作并对其进行扩展。
您需要创建一个扩展 EvaluationContextExtensionSupport 的 bean
?#{principal?.username}
安全表达式起作用
关于java - 过滤所有查询的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32744586/