Skip to content

Commit 50eb0da

Browse files
authored
Merge pull request #4464 from nhsuk/prescriber-permissions
Update policies for prescribers
2 parents e2f8ded + 03e0038 commit 50eb0da

11 files changed

+169
-33
lines changed

app/models/session.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ def programmes_for(year_group: nil, patient: nil, academic_year: nil)
219219
end
220220

221221
def vaccine_methods_for(user:)
222-
if user.is_nurse?
222+
if user.is_nurse? || user.is_prescriber?
223223
vaccine_methods
224224
elsif user.is_healthcare_assistant? && pgd_supply_enabled?
225225
%w[nasal]

app/policies/gillick_assessment_policy.rb

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,10 @@
22

33
class GillickAssessmentPolicy < ApplicationPolicy
44
def create?
5-
user.is_nurse?
6-
end
7-
8-
def new?
9-
create?
10-
end
11-
12-
def edit?
13-
user.is_nurse?
5+
user.is_nurse? || user.is_prescriber?
146
end
157

168
def update?
17-
edit?
9+
user.is_nurse? || user.is_prescriber?
1810
end
1911
end

app/policies/session_attendance_policy.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
class SessionAttendancePolicy < ApplicationPolicy
44
def create?
5-
super && !already_vaccinated? && !was_seen_by_nurse?
5+
!already_vaccinated? && !was_seen_by_nurse?
66
end
77

88
def update?
9-
super && !already_vaccinated? && !was_seen_by_nurse?
9+
!already_vaccinated? && !was_seen_by_nurse?
1010
end
1111

1212
private

app/policies/session_policy.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
# frozen_string_literal: true
22

33
class SessionPolicy < ApplicationPolicy
4-
def update?
5-
user.is_nurse? || user.is_admin?
6-
end
7-
84
def import? = show?
95

106
def make_in_progress? = edit?

app/policies/triage_policy.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
class TriagePolicy < ApplicationPolicy
44
def create?
5-
user.is_nurse?
5+
user.is_nurse? || user.is_prescriber?
66
end
77

88
def update?
9-
user.is_nurse?
9+
user.is_nurse? || user.is_prescriber?
1010
end
1111

1212
class Scope < ApplicationPolicy::Scope

app/policies/vaccination_record_policy.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
class VaccinationRecordPolicy < ApplicationPolicy
44
def create?
5-
user.is_nurse? ||
5+
user.is_nurse? || user.is_prescriber? ||
66
(
77
patient.approved_vaccine_methods(programme:, academic_year:) &
88
session.vaccine_methods_for(user:)
@@ -12,13 +12,15 @@ def create?
1212
def new? = create?
1313

1414
def record_already_vaccinated?
15-
user.is_nurse? && !session.today? &&
15+
(user.is_nurse? || user.is_prescriber?) && !session.today? &&
1616
patient.vaccination_status(programme:, academic_year:).none_yet?
1717
end
1818

1919
def edit?
20-
(record.performed_by_user_id == user.id || user.is_nurse?) &&
21-
record.recorded_in_service? &&
20+
(
21+
record.performed_by_user_id == user.id || user.is_nurse? ||
22+
user.is_prescriber?
23+
) && record.recorded_in_service? &&
2224
record.performed_ods_code == user.selected_organisation.ods_code
2325
end
2426

spec/models/session_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,12 @@
309309
it { should match_array(%w[nasal injection]) }
310310
end
311311

312+
context "with a prescriber" do
313+
let(:user) { create(:prescriber) }
314+
315+
it { should match_array(%w[nasal injection]) }
316+
end
317+
312318
context "with a healthcare assistant" do
313319
let(:user) { create(:healthcare_assistant) }
314320

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# frozen_string_literal: true
2+
3+
describe GillickAssessmentPolicy do
4+
subject(:policy) { described_class.new(user, GillickAssessment) }
5+
6+
shared_examples "only nurses or prescribers" do
7+
context "with an admin" do
8+
let(:user) { create(:admin) }
9+
10+
it { should be(false) }
11+
end
12+
13+
context "with a healthcare assistant" do
14+
let(:user) { create(:healthcare_assistant) }
15+
16+
it { should be(false) }
17+
end
18+
19+
context "with a nurse" do
20+
let(:user) { create(:nurse) }
21+
22+
it { should be(true) }
23+
end
24+
25+
context "with a prescriber" do
26+
let(:user) { create(:prescriber) }
27+
28+
it { should be(true) }
29+
end
30+
end
31+
32+
describe "#new?" do
33+
subject { policy.new? }
34+
35+
include_examples "only nurses or prescribers"
36+
end
37+
38+
describe "#create?" do
39+
subject { policy.create? }
40+
41+
include_examples "only nurses or prescribers"
42+
end
43+
44+
describe "#edit?" do
45+
subject { policy.edit? }
46+
47+
include_examples "only nurses or prescribers"
48+
end
49+
50+
describe "#update?" do
51+
subject { policy.update? }
52+
53+
include_examples "only nurses or prescribers"
54+
end
55+
end

spec/policies/session_policy_spec.rb

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,29 @@
4242
context "with a scheduled session" do
4343
let(:session) { create(:session, :scheduled) }
4444

45-
it { should be(false) }
45+
it { should be(true) }
46+
end
47+
48+
context "with an unscheduled session" do
49+
let(:session) { create(:session, :unscheduled) }
50+
51+
it { should be(true) }
52+
end
53+
end
54+
55+
context "with a prescriber" do
56+
let(:user) { create(:prescriber) }
57+
58+
context "with a scheduled session" do
59+
let(:session) { create(:session, :scheduled) }
60+
61+
it { should be(true) }
4662
end
4763

4864
context "with an unscheduled session" do
4965
let(:session) { create(:session, :unscheduled) }
5066

51-
it { should be(false) }
67+
it { should be(true) }
5268
end
5369
end
5470
end
Lines changed: 62 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,70 @@
11
# frozen_string_literal: true
22

33
describe TriagePolicy do
4-
describe "Scope#resolve" do
5-
subject { TriagePolicy::Scope.new(user, Triage).resolve }
4+
subject(:policy) { described_class.new(user, Triage) }
65

7-
let(:team) { create(:team) }
8-
let(:user) { create(:user, team:) }
6+
shared_examples "only nurses or prescribers" do
7+
context "with an admin" do
8+
let(:user) { create(:admin) }
99

10-
let(:team_batch) { create(:triage, team:) }
11-
let(:non_team_batch) { create(:triage) }
10+
it { should be(false) }
11+
end
1212

13-
it { should include(team_batch) }
14-
it { should_not include(non_team_batch) }
13+
context "with a healthcare assistant" do
14+
let(:user) { create(:healthcare_assistant) }
15+
16+
it { should be(false) }
17+
end
18+
19+
context "with a nurse" do
20+
let(:user) { create(:nurse) }
21+
22+
it { should be(true) }
23+
end
24+
25+
context "with a prescriber" do
26+
let(:user) { create(:prescriber) }
27+
28+
it { should be(true) }
29+
end
30+
end
31+
32+
describe "#new?" do
33+
subject { policy.new? }
34+
35+
include_examples "only nurses or prescribers"
36+
end
37+
38+
describe "#create?" do
39+
subject { policy.create? }
40+
41+
include_examples "only nurses or prescribers"
42+
end
43+
44+
describe "#edit?" do
45+
subject { policy.edit? }
46+
47+
include_examples "only nurses or prescribers"
48+
end
49+
50+
describe "#update?" do
51+
subject { policy.update? }
52+
53+
include_examples "only nurses or prescribers"
54+
end
55+
56+
describe TriagePolicy::Scope do
57+
describe "#resolve" do
58+
subject { described_class.new(user, Triage).resolve }
59+
60+
let(:team) { create(:team) }
61+
let(:user) { create(:user, team:) }
62+
63+
let(:team_batch) { create(:triage, team:) }
64+
let(:non_team_batch) { create(:triage) }
65+
66+
it { should include(team_batch) }
67+
it { should_not include(non_team_batch) }
68+
end
1569
end
1670
end

0 commit comments

Comments
 (0)