Skip to content

Commit cff9848

Browse files
committed
update query to recurse to permissionroot
1 parent ac32815 commit cff9848

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/RoleAssignment.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,24 @@
5959
@NamedNativeQueries({
6060
@NamedNativeQuery(
6161
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 " +
6376
"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"
6880
)
6981
})
7082
@SqlResultSetMapping(

0 commit comments

Comments
 (0)