更改特定用户的数据库查询

时间:2014-12-08 08:43:21

标签: spring hibernate jpa spring-data

在我们的项目中,我们使用的是spring,JPA&通过Mysql休眠。 我有一个数据库表,其中包含每个用户的权限。这个表对整个系统有很多影响。 我需要添加一个超级用户" / admin,它拥有所有权限。 我想要这个管理员用户发出的每个查询 - 将"模拟"比如权限表包含对此管理员用户的权限。

例如: 数据库表是 -

entityId | userId

如果我们有2个实体,而用户#17对它们有权限,那么行将是

1 | 17
2 | 17

让我们说管理员用户是用户#20。我不想在此表中添加行。我希望每次访问此表都会添加"临时行"。 例如,如果我有以下查询:

select e from MyEntity e where e.id in (select p.entityId from PermissionEntity p where p.userId = :userId)

我希望如果登录用户是admin用户,则查询将如下所示:

select e from MyEntity e where e.id in (select p.entityId from PermissionEntity p)

select e from MyEntity e where e.id in (select p.entityId from PermissionEntity p where 1=1 or p.userId = :userId)

有任何建议如何实现这个?

1 个答案:

答案 0 :(得分:0)

我想你有一个核心方法来检查权利。如果是这样,只需尝试:

TypedQuery<MyEntity> query = null;
if (crtUser.getId() != 20) {
    query = entityManager.createQuery("select e from MyEntity e where e.id in (select p.entityId from PermissionEntity p p.userId = :userId)", MyEntitiy.class);
}
else {
    query = entityManager.createQuery("select e from MyEntity e", MyEntitiy.class);
}

如果您没有这种逻辑的核心方法,但只有一种方法,那么您可以尝试以下方法:

    query = entityManager.createQuery("select e from MyEntity e where e.id in (select p.entityId from PermissionEntity p p.userId = :userId) OR :userId=20", MyEntitiy.class);