Skip to content

Commit

Permalink
Added "group" ownership query (#787)
Browse files Browse the repository at this point in the history
  • Loading branch information
adkinsrs committed Aug 20, 2024
1 parent 1df4836 commit 432570b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
14 changes: 13 additions & 1 deletion www/cgi/search_datasets.cgi
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,25 @@ def main():
# match.
ownership_bits.append("d.id IN ('XYZ')")

if 'group' in owners:
ownership_bits.append("d.owner_id IN \
(SELECT DISTINCT user_id FROM user_group_membership WHERE group_id IN \
(SELECT group_id FROM user_group_membership WHERE user_id = %s)) \
")
qry_params.append(user.id)

else:
ownership_bits.append("d.is_public = 1")
ownership_bits.append("d.owner_id = %s")
qry_params.append(user.id)
if shared_dataset_id_str:
ownership_bits.append(f"d.id IN ({shared_dataset_id_str})")

ownership_bits.append("d.owner_id IN \
(SELECT DISTINCT user_id FROM user_group_membership WHERE group_id IN \
(SELECT group_id FROM user_group_membership WHERE user_id = %s)) \
")
qry_params.extend([user.id, user.id])

wheres.append(f"({' OR '.join(ownership_bits)})") # OR accomodates the "not ownership" case

else:
Expand Down
21 changes: 19 additions & 2 deletions www/cgi/search_gene_carts.cgi
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,29 @@ def main():
if 'public' in owners:
ownership_bits.append("gc.is_public = 1")

if 'shared' in owners:
# NOT IMPLEMENTED YET
pass

if 'group' in owners:
ownership_bits.append("gc.user_id IN \
(SELECT DISTINCT user_id FROM user_group_membership WHERE group_id IN \
(SELECT group_id FROM user_group_membership WHERE user_id = %s)) \
")
qry_params.append(user.id)

wheres.append("AND ({0})".format(' OR '.join(ownership_bits)))

# otherwise, give the usual self and public.
else:
wheres.append("AND (gc.is_public = 1 OR gc.user_id = %s)")
qry_params.append(user.id)
wheres.append("AND (gc.is_public = 1 \
OR gc.user_id = %s \
OR (gc.user_id IN \
(SELECT DISTINCT user_id FROM user_group_membership WHERE group_id IN \
(SELECT group_id FROM user_group_membership WHERE user_id = %s)) \
) \
)")
qry_params.extend([user.id, user.id])

if search_terms:
selects.append(' MATCH(gc.label, gc.ldesc) AGAINST("%s" IN BOOLEAN MODE) as rscore')
Expand Down

0 comments on commit 432570b

Please sign in to comment.