我正在尝试编写一个spring数据jpa查询,该查询为我提供了所有仪表板实体,其中UserRole包含传递的(或当前的spring security principal)用户。
相关代码:
@Entity
public class Dashboard extends BaseModel {
private String name;
@ManyToMany
private Set<UserRole> allowedUserRoles;
}
@Entity
public class UserRole {
@Id
@NotNull
private String uid;
@ManyToMany(mappedBy = "userRoles")
private Set<User> users = new HashSet();
}
@Entity
public class User implements UserDetails {
@Id
@NotNull
private String username;
private String uuid;
private String displayName;
private String email;
private boolean active = false;
private boolean superadmin = false;
@ManyToMany(fetch = FetchType.EAGER)
private Set<UserRole> userRoles = new HashSet<>();
}
@RepositoryRestResource(collectionResourceRel = "dashboards", path = "dashboards")
public interface DashboardRepository extends JpaRepository<Dashboard, Long> {
@Query("...")
List<Dashboard> findWithPermission(User user);
}
最佳, 添
答案 0 :(得分:1)
尝试使用MEMBER OF
:
@Query("SELECT DISTINCT d FROM Dashboard d WHERE :user MEMBER OF d.allowedUsers.users")
答案 1 :(得分:0)
传递的用户对象必须已经有一个ID,可能是您在查找用户名和密码时找到的,只需使用它来查找分配给用户的权限
最后的交叉表应该是
useridsxroleidxpermission1id useridsxroleidxpermission2id 等...