Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix admin permissions for finished budgets #3822

Merged
merged 3 commits into from
Nov 6, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Next Next commit
Fix admin permissions for finished budgets
Although we weren't showing links in the views to execute certain
actions, forms could be still sent using a PUT/PATCH pull request to the
controller actions.
  • Loading branch information
javierm committed Nov 6, 2019
commit 6bbfb555868249c4c4b1f77c689163e1ffd54da5
2 changes: 2 additions & 0 deletions app/controllers/admin/budget_investments_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def show
end

def edit
authorize! :admin_update, @investment
load_staff
load_valuator_groups
load_tags
Expand All @@ -52,6 +53,7 @@ def update
end

def toggle_selection
authorize! :toggle_selection, @investment
@investment.toggle :selected
@investment.save!
load_investments
Expand Down
4 changes: 3 additions & 1 deletion app/models/abilities/administrator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ def initialize(user)
can [:read, :create, :update, :destroy], Budget::Heading
can [:hide, :admin_update, :toggle_selection], Budget::Investment
can [:valuate, :comment_valuation], Budget::Investment
cannot [:comment_valuation], Budget::Investment, budget: { phase: "finished" }
cannot [:admin_update, :toggle_selection, :valuate, :comment_valuation],
Budget::Investment, budget: { phase: "finished" }

can :create, Budget::ValuatorAssignment

can :read_admin_stats, Budget, &:balloting_or_later?
Expand Down
48 changes: 26 additions & 22 deletions app/views/admin/budget_investments/_select_investment.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -61,30 +61,34 @@

<td id="selection" class="small text-center" data-field="selected">
<% if investment.selected? %>
<%= link_to_unless investment.budget.finished?,
t("admin.budget_investments.index.selected"),
toggle_selection_admin_budget_budget_investment_path(@budget,
investment,
filter: params[:filter],
sort_by: params[:sort_by],
min_total_supports: params[:min_total_supports],
max_total_supports: params[:max_total_supports],
advanced_filters: params[:advanced_filters],
page: params[:page]),
method: :patch,
remote: true,
class: "button small expanded" %>
<%= link_to_if can?(:toggle_selection, investment),
t("admin.budget_investments.index.selected"),
toggle_selection_admin_budget_budget_investment_path(
@budget,
investment,
filter: params[:filter],
sort_by: params[:sort_by],
min_total_supports: params[:min_total_supports],
max_total_supports: params[:max_total_supports],
advanced_filters: params[:advanced_filters],
page: params[:page]
),
method: :patch,
remote: true,
class: "button small expanded" %>
<% elsif investment.feasible? && investment.valuation_finished? %>
<% unless investment.budget.finished? %>
<% if can?(:toggle_selection, investment) %>
<%= link_to t("admin.budget_investments.index.select"),
toggle_selection_admin_budget_budget_investment_path(@budget,
investment,
filter: params[:filter],
sort_by: params[:sort_by],
min_total_supports: params[:min_total_supports],
max_total_supports: params[:max_total_supports],
advanced_filters: params[:advanced_filters],
page: params[:page]),
toggle_selection_admin_budget_budget_investment_path(
@budget,
investment,
filter: params[:filter],
sort_by: params[:sort_by],
min_total_supports: params[:min_total_supports],
max_total_supports: params[:max_total_supports],
advanced_filters: params[:advanced_filters],
page: params[:page]
),
method: :patch,
remote: true,
class: "button small hollow expanded" %>
Expand Down
43 changes: 26 additions & 17 deletions app/views/admin/budget_investments/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@
<%= render "written_by_author" %>

<h2 class="inline-block"><%= t("admin.budget_investments.show.preview") %></h2>
<div class="float-right">
<%= link_to t("admin.budget_investments.show.edit"),
edit_admin_budget_budget_investment_path(
@budget,
@investment,
Budget::Investment.filter_params(params).to_h
),
class: "button hollow" unless @budget.finished? %>
</div>
<% if can?(:admin_update, @investment) %>
<div class="float-right">
<%= link_to t("admin.budget_investments.show.edit"),
edit_admin_budget_budget_investment_path(
@budget,
@investment,
Budget::Investment.filter_params(params).to_h
),
class: "button hollow" %>
</div>
<% end %>

<hr>
<%= render "/budgets/investments/investment_detail", investment: @investment, preview: true %>
Expand Down Expand Up @@ -50,19 +52,26 @@
<% end %>
</p>

<p>
<%= link_to t("admin.budget_investments.show.edit_classification"),
edit_admin_budget_budget_investment_path(@budget, @investment,
{ anchor: "classification" }.merge(Budget::Investment.filter_params(params).to_h)) unless @budget.finished? %>
</p>
<% if can?(:admin_update, @investment) %>
<p>
<%= link_to t("admin.budget_investments.show.edit_classification"),
edit_admin_budget_budget_investment_path(
@budget,
@investment,
{ anchor: "classification" }.merge(Budget::Investment.filter_params(params).to_h)
) %>
</p>
<% end %>

<hr>

<h2><%= t("admin.budget_investments.show.dossier") %></h2>
<%= render "valuation/budget_investments/dossier" %>
<p>
<%= link_to t("admin.budget_investments.show.edit_dossier"), edit_valuation_budget_budget_investment_path(@budget, @investment) unless @budget.finished? %>
</p>
<% if can?(:valuate, @investment) %>
<p>
<%= link_to t("admin.budget_investments.show.edit_dossier"), edit_valuation_budget_budget_investment_path(@budget, @investment) %>
</p>
<% end %>

<%= render "valuation/budget_investments/valuation_comments" %>

Expand Down
20 changes: 11 additions & 9 deletions app/views/valuation/budget_investments/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,17 @@
<br>

<h2 class="inline-block"><%= t("admin.budget_investments.show.preview") %></h2>
<div class="float-right">
<%= link_to t("admin.budget_investments.show.edit"),
edit_valuation_budget_budget_investment_path(
@budget,
@investment,
Budget::Investment.filter_params(params)
),
class: "button hollow" unless @budget.finished? %>
</div>
<% if can?(:valuate, @investment) %>
<div class="float-right">
<%= link_to t("admin.budget_investments.show.edit"),
edit_valuation_budget_budget_investment_path(
@budget,
@investment,
Budget::Investment.filter_params(params)
),
class: "button hollow" %>
</div>
<% end %>

<hr>
<%= render "/budgets/investments/investment_detail", investment: @investment, preview: true %>
Expand Down
6 changes: 5 additions & 1 deletion spec/models/abilities/administrator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
let(:comment) { create(:comment) }
let(:proposal) { create(:proposal, author: user) }
let(:budget_investment) { create(:budget_investment) }
let(:finished_investment) { create(:budget_investment, budget: create(:budget, :finished)) }
let(:legislation_question) { create(:legislation_question) }
let(:poll_question) { create(:poll_question) }

Expand Down Expand Up @@ -77,7 +78,10 @@
it { should be_able_to(:hide, Budget::Investment) }

it { should be_able_to(:valuate, create(:budget_investment, budget: create(:budget, :valuating))) }
it { should be_able_to(:valuate, create(:budget_investment, budget: create(:budget, :finished))) }
it { should_not be_able_to(:admin_update, finished_investment) }
it { should_not be_able_to(:valuate, finished_investment) }
it { should_not be_able_to(:comment_valuation, finished_investment) }
it { should_not be_able_to(:toggle_selection, finished_investment) }

it { should be_able_to(:destroy, proposal_image) }
it { should be_able_to(:destroy, proposal_document) }
Expand Down