Skip to content

Commit 15c2e0a

Browse files
authored
Merge pull request #8502 from stopfstedt/prevent-unprivileged-access-to-report-routes
redirect non-privileged users to 404 page on reports routes.
2 parents 5f8ddfe + bf1ffcb commit 15c2e0a

File tree

9 files changed

+48
-5
lines changed

9 files changed

+48
-5
lines changed

packages/frontend/app/routes/reports.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,16 @@ import Route from '@ember/routing/route';
22
import { service } from '@ember/service';
33

44
export default class ReportsRoute extends Route {
5+
@service currentUser;
6+
@service router;
57
@service session;
68

79
beforeModel(transition) {
810
this.session.requireAuthentication(transition, 'login');
11+
if (!this.currentUser.performsNonLearnerFunction) {
12+
// Slash on the route name is necessary here due to this bug:
13+
// https://github.com/emberjs/ember.js/issues/12945
14+
this.router.replaceWith('/four-oh-four');
15+
}
916
}
1017
}

packages/frontend/app/routes/reports/curriculum.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ import { service } from '@ember/service';
33
import { DateTime } from 'luxon';
44

55
export default class ReportsCurriculumRoute extends Route {
6+
@service currentUser;
7+
@service router;
68
@service session;
79
@service store;
810
@service graphql;
9-
@service currentUser;
1011

1112
queryParams = {
1213
courses: {
@@ -16,6 +17,11 @@ export default class ReportsCurriculumRoute extends Route {
1617

1718
beforeModel(transition) {
1819
this.session.requireAuthentication(transition, 'login');
20+
if (!this.currentUser.performsNonLearnerFunction) {
21+
// Slash on the route name is necessary here due to this bug:
22+
// https://github.com/emberjs/ember.js/issues/12945
23+
this.router.replaceWith('/four-oh-four');
24+
}
1925
}
2026

2127
async model() {

packages/frontend/app/routes/reports/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@ import Route from '@ember/routing/route';
22
import { service } from '@ember/service';
33

44
export default class ReportsIndexRoute extends Route {
5+
@service currentUser;
56
@service session;
67
@service router;
78

89
beforeModel(transition) {
910
this.session.requireAuthentication(transition, 'login');
11+
if (!this.currentUser.performsNonLearnerFunction) {
12+
// Slash on the route name is necessary here due to this bug:
13+
// https://github.com/emberjs/ember.js/issues/12945
14+
this.router.replaceWith('/four-oh-four');
15+
}
1016
this.router.replaceWith('reports.subjects');
1117
}
1218
}

packages/frontend/app/routes/reports/subject.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@ import Route from '@ember/routing/route';
22
import { service } from '@ember/service';
33

44
export default class ReportsSubjectRoute extends Route {
5+
@service currentUser;
6+
@service router;
57
@service reporting;
68
@service session;
79
@service store;
810

911
beforeModel(transition) {
1012
this.session.requireAuthentication(transition, 'login');
13+
if (!this.currentUser.performsNonLearnerFunction) {
14+
// Slash on the route name is necessary here due to this bug:
15+
// https://github.com/emberjs/ember.js/issues/12945
16+
this.router.replaceWith('/four-oh-four');
17+
}
1118
}
1219

1320
model(params) {
Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
11
import Route from '@ember/routing/route';
2+
import { service } from '@ember/service';
23

3-
export default class ReportsSubjectsRoute extends Route {}
4+
export default class ReportsSubjectsRoute extends Route {
5+
@service currentUser;
6+
@service router;
7+
@service session;
8+
9+
beforeModel(transition) {
10+
this.session.requireAuthentication(transition, 'login');
11+
if (!this.currentUser.performsNonLearnerFunction) {
12+
// Slash on the route name is necessary here due to this bug:
13+
// https://github.com/emberjs/ember.js/issues/12945
14+
this.router.replaceWith('/four-oh-four');
15+
}
16+
}
17+
}

packages/frontend/tests/acceptance/access-denied-test.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ module('Acceptance | Access Denied', function (hooks) {
3232
'/data/courses/1/terms/1',
3333
'/data/courses/1/vocabularies',
3434
'/data/courses/1/vocabularies/1',
35+
'/reports/curriculum',
36+
'/reports/subjects',
37+
'/reports/subjects/1',
3538
],
3639
async function (assert, url) {
3740
await visit(url);

packages/frontend/tests/acceptance/reports/curriculum-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ module('Acceptance | Reports - Curriculum Reports', function (hooks) {
1313

1414
hooks.beforeEach(async function () {
1515
this.school = this.server.create('school');
16-
await setupAuthentication({ school: this.school });
16+
await setupAuthentication({ school: this.school }, true);
1717
this.server.post('api/graphql', ({ db }, { requestBody }) => {
1818
const { query } = JSON.parse(requestBody);
1919
if (query.includes('courses(academicYears:')) {

packages/frontend/tests/acceptance/reports/subject-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ module('Acceptance | Reports - Subject Report', function (hooks) {
1010

1111
hooks.beforeEach(async function () {
1212
const school = this.server.create('school');
13-
const user = await setupAuthentication({ school });
13+
const user = await setupAuthentication({ school }, true);
1414
const vocabulary = this.server.create('vocabulary', {
1515
school,
1616
});

packages/frontend/tests/acceptance/reports/subjects-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module('Acceptance | Reports - Subject Reports', function (hooks) {
1212

1313
hooks.beforeEach(async function () {
1414
const school = this.server.create('school');
15-
const user = await setupAuthentication({ school });
15+
const user = await setupAuthentication({ school }, true);
1616
const vocabulary = this.server.create('vocabulary', {
1717
school,
1818
});

0 commit comments

Comments
 (0)