From 36a21cd0f263892408d2bddbd2ae81f9e94d501e Mon Sep 17 00:00:00 2001 From: Andy Zhao Date: Mon, 8 Apr 2019 18:00:59 -0400 Subject: [PATCH] Add tech admin role and allow tech admins to view /delayed_job (#2343) * Add tech support role * Add tech support permission method * Enabled /delayed_job for tech support users * Fix typo oops * Add tests for tech support viewing /delayed_job * Fix typo again... * Rename tech role to tech admin --- app/models/role.rb | 1 + app/models/user.rb | 4 ++++ config/routes.rb | 2 +- spec/requests/delayed_job_spec.rb | 19 +++++++++++++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/models/role.rb b/app/models/role.rb index 62dbdbb06..b879d2db7 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -13,6 +13,7 @@ class Role < ApplicationRecord in: %w[ super_admin admin + tech_admin tag_moderator trusted banned diff --git a/app/models/user.rb b/app/models/user.rb index 0e37ee2c2..68126983d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -317,6 +317,10 @@ class User < ApplicationRecord has_role?(:super_admin) || has_role?(:admin) end + def tech_admin? + has_role?(:tech_admin) || has_role?(:super_admin) + end + def trusted Rails.cache.fetch("user-#{id}/has_trusted_role", expires_in: 200.hours) do has_role? :trusted diff --git a/config/routes.rb b/config/routes.rb index 6161dcfb6..d617179d9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -7,7 +7,7 @@ Rails.application.routes.draw do registrations: "registrations" } - authenticated :user, ->(user) { user.admin? } do + authenticated :user, ->(user) { user.tech_admin? } do mount DelayedJobWeb, at: "/delayed_job" end diff --git a/spec/requests/delayed_job_spec.rb b/spec/requests/delayed_job_spec.rb index 2730288ba..5bf4f95e4 100644 --- a/spec/requests/delayed_job_spec.rb +++ b/spec/requests/delayed_job_spec.rb @@ -4,6 +4,11 @@ RSpec.describe "Delayed Job web interface", type: :request do let(:user) { create(:user) } let(:super_admin) { create(:user, :super_admin) } let(:article) { create(:article, user_id: user.id) } + let(:tech_admin) do + user = create(:user) + user.add_role :tech_admin + user + end describe "GET /delayed_job" do context "when not logged in" do @@ -36,5 +41,19 @@ RSpec.describe "Delayed Job web interface", type: :request do expect(response.body).to include "Overview" end end + + context "when logged in as a tech support member" do + before { login_as tech_admin } + + it "redirects to overview" do + get "/delayed_job" + expect(response).to redirect_to("/delayed_job/overview") + end + + it "renders overview" do + get "/delayed_job/overview" + expect(response.body).to include "Overview" + end + end end end