|
59 | 59 | @NamedNativeQueries({ |
60 | 60 | @NamedNativeQuery( |
61 | 61 | name = "RoleAssignment.findAssigneesWithPermissionOnDvObject", |
62 | | - query = "SELECT DISTINCT ra.assigneeidentifier FROM roleassignment ra " + |
| 62 | + query = "WITH RECURSIVE owner_hierarchy(id, owner_id, permissionroot) AS ( " + |
| 63 | + " SELECT dvo.id, dvo.owner_id, COALESCE(dv.permissionroot, false) " + |
| 64 | + " FROM dvobject dvo " + |
| 65 | + " LEFT JOIN dataverse dv ON dvo.id = dv.id " + |
| 66 | + " WHERE dvo.id = ?2 " + |
| 67 | + " UNION ALL " + |
| 68 | + " SELECT dvo.id, dvo.owner_id, dv.permissionroot " + |
| 69 | + " FROM dvobject dvo " + |
| 70 | + " LEFT JOIN dataverse dv ON dvo.id = dv.id " + |
| 71 | + " JOIN owner_hierarchy oh ON dvo.owner_id = oh.id " + |
| 72 | + " WHERE NOT oh.permissionroot " + |
| 73 | + ") " + |
| 74 | + "SELECT DISTINCT ra.assigneeidentifier " + |
| 75 | + "FROM roleassignment ra " + |
63 | 76 | "JOIN dataverserole dr ON ra.role_id = dr.id " + |
64 | | - "JOIN dvobject dob ON ra.definitionpoint_id = dob.id " + |
65 | | - "WHERE get_bit(dr.permissionbits::bit(64), ?1) = '1' " + |
66 | | - "AND dob.id = ?2", |
67 | | - resultSetMapping = "AssigneeIdentifierMapping" |
| 77 | + "JOIN owner_hierarchy oh ON ra.definitionpoint_id = oh.id " + |
| 78 | + "WHERE get_bit(dr.permissionbits::bit(64), ?1) = '1'", |
| 79 | + resultSetMapping = "AssigneeIdentifierMapping" |
68 | 80 | ) |
69 | 81 | }) |
70 | 82 | @SqlResultSetMapping( |
|
0 commit comments