我使用Spring和Mysql创建一个新的应用程序(但我可以相对自由地使用其他东西) 在此应用程序中,用户登录无法查看所有数据(用户'admin'除外)。 有一组树,用户在组中。用户只能看到其组(或后代组)的用户(或其他对象)。
我试图找到“优雅地”做到这一点的想法: 例如,如果我写:productDao.findAll(),它返回所有已经过滤的产品,而不是在所有DAO中重写所有请求。
如果它不存在,我接受所有的想法:重构数据库?改变其他数据库的mysql,不使用JPA,其他......或者可能是,我的方法错了,做那样的事情是个坏主意......
答案 0 :(得分:2)
这是使用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}
安全表达式