mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-10-04 02:45:53 +08:00
Merge pull request #8175 from aignatov-bio/ai-sci-11487-add-team-owner-self-assign-to-forms
Add team owner self assign to forms [SCI-11487]
This commit is contained in:
commit
af049ea782
4 changed files with 25 additions and 4 deletions
|
@ -1,7 +1,12 @@
|
|||
<template>
|
||||
<a :href="params.data.urls.show" :title="params.data.name">
|
||||
<a v-if="params.data.urls.show"
|
||||
:href="params.data.urls.show"
|
||||
:title="params.data.name">
|
||||
{{ params.data.name }}
|
||||
</a>
|
||||
<span v-else class="text-sn-grey" :title="params.data.name">
|
||||
{{ params.data.name }}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
|
|
@ -36,6 +36,20 @@ class Form < ApplicationRecord
|
|||
|
||||
enum :visibility, { hidden: 0, visible: 1 }
|
||||
|
||||
def self.viewable_by_user(user, teams)
|
||||
# Team owners see all forms in the team
|
||||
owner_role = UserRole.find_predefined_owner_role
|
||||
forms = Form.where(team: teams)
|
||||
viewable_as_team_owner = forms.joins("INNER JOIN user_assignments team_user_assignments " \
|
||||
"ON team_user_assignments.assignable_type = 'Team' " \
|
||||
"AND team_user_assignments.assignable_id = forms.team_id")
|
||||
.where(team_user_assignments: { user_id: user, user_role_id: owner_role })
|
||||
.select(:id)
|
||||
viewable_as_assigned = forms.with_granted_permissions(user, FormPermissions::READ).select(:id)
|
||||
|
||||
where('forms.id IN ((?) UNION (?))', viewable_as_team_owner, viewable_as_assigned)
|
||||
end
|
||||
|
||||
def archived_branch?
|
||||
archived?
|
||||
end
|
||||
|
|
|
@ -57,10 +57,11 @@ module Lists
|
|||
|
||||
def urls
|
||||
urls_list = {
|
||||
show: form_path(object),
|
||||
show_access: access_permissions_form_path(object)
|
||||
}
|
||||
|
||||
urls_list[:show] = form_path(object) if can_read_form?(object)
|
||||
|
||||
if can_manage_form_users?(object)
|
||||
urls_list[:update_access] = access_permissions_form_path(object)
|
||||
urls_list[:new_access] = new_access_permissions_form_path(id: object.id)
|
||||
|
|
|
@ -10,8 +10,9 @@ module Lists
|
|||
def fetch_records
|
||||
@records =
|
||||
Form.includes(:team, user_assignments: %i(user user_role))
|
||||
.joins(:user_assignments)
|
||||
.left_outer_joins(:user_assignments)
|
||||
.left_outer_joins(:form_responses)
|
||||
.viewable_by_user(@user, @team)
|
||||
.joins(
|
||||
'LEFT OUTER JOIN users AS publishers ' \
|
||||
'ON forms.published_by_id = publishers.id'
|
||||
|
@ -20,7 +21,7 @@ module Lists
|
|||
'publishers.full_name AS published_by_user',
|
||||
'COUNT(DISTINCT form_responses.id) AS used_in_protocols_count',
|
||||
'COUNT(DISTINCT user_assignments.id) AS user_assignment_count'
|
||||
).where(team: @team).readable_by_user(@user).group('forms.id', 'publishers.full_name')
|
||||
).where(team: @team).group('forms.id', 'publishers.full_name')
|
||||
|
||||
view_mode = @params[:view_mode] || 'active'
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue