Skip to content

Commit 7a0d31a

Browse files
plukasewbjones86
authored andcommitted
SAK-38431: Add role checks and redirects to all gradebook pages
1 parent 1e6ff4c commit 7a0d31a

8 files changed

+43
-20
lines changed

gradebookng/tool/src/java/org/sakaiproject/gradebookng/GradebookNgApplication.java

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
2727

2828
import org.sakaiproject.gradebookng.framework.GradebookNgStringResourceLoader;
29+
import org.sakaiproject.gradebookng.tool.pages.AccessDeniedPage;
2930
import org.sakaiproject.gradebookng.tool.pages.ErrorPage;
3031
import org.sakaiproject.gradebookng.tool.pages.GradebookPage;
3132
import org.sakaiproject.gradebookng.tool.pages.ImportExportPage;
@@ -51,6 +52,8 @@ public void init() {
5152
mountPage("/importexport", ImportExportPage.class);
5253
mountPage("/permissions", PermissionsPage.class);
5354
mountPage("/gradebook", StudentPage.class);
55+
mountPage("/accessdenied", AccessDeniedPage.class);
56+
mountPage("/error", ErrorPage.class);
5457

5558
// remove the version number from the URL so that browser refreshes re-render the page
5659
getRequestCycleSettings().setRenderStrategy(RenderStrategy.ONE_PASS_RENDER);

gradebookng/tool/src/java/org/sakaiproject/gradebookng/GradebookNgApplication.properties

-2
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,6 @@ importExport.export.csv.headers.example.ignore = This column will be ignored
316316
# Student ID and Student Name are not here because they are a special string.
317317
# To i18n these, the import helper would need to be made to look for columns by position instead of by column title
318318

319-
role.none=You do not have permission to view the gradebook.
320-
321319
assignment.option.edit = Edit Item Details
322320
assignment.option.viewgradestatistics = View Grade Statistics
323321
assignment.option.moveleft = Move Left

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/BasePage.java

+23-2
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public BasePage() {
7979

8080
// setup some data that can be shared across all pages
8181
this.currentUserUuid = this.businessService.getCurrentUser().getId();
82+
role = GbRole.NONE;
8283
try {
8384
this.role = this.businessService.getUserRole();
8485
} catch (final GbAccessDeniedException e) {
@@ -229,7 +230,7 @@ public void renderHead(final IHeaderResponse response) {
229230
/**
230231
* Helper to disable a link. Add the Sakai class 'current'.
231232
*/
232-
protected void disableLink(final Link<Void> l) {
233+
protected final void disableLink(final Link<Void> l) {
233234
l.add(new AttributeAppender("class", new Model<String>("current"), " "));
234235
l.replace(new Label("screenreaderlabel", getString("link.screenreader.tabselected")));
235236
l.setEnabled(false);
@@ -280,7 +281,7 @@ public void setUserPreferredLocale() {
280281
*
281282
* @param message the message
282283
*/
283-
public void sendToAccessDeniedPage(final String message) {
284+
public final void sendToAccessDeniedPage(final String message) {
284285
final PageParameters params = new PageParameters();
285286
params.add("message", message);
286287
log.debug("Redirecting to AccessDeniedPage: " + message);
@@ -290,4 +291,24 @@ public void sendToAccessDeniedPage(final String message) {
290291
public GbRole getCurrentRole() {
291292
return BasePage.this.role;
292293
}
294+
295+
/**
296+
* Performs role checks for instructor-only pages and redirects users to appropriate pages based on their role.
297+
* No role -> AccessDeniedPage. Student -> StudentPage. TA -> GradebookPage.
298+
*/
299+
protected final void defaultRoleChecksForInstructorOnlyPage()
300+
{
301+
switch (role)
302+
{
303+
case NONE:
304+
sendToAccessDeniedPage(getString("error.role"));
305+
break;
306+
case STUDENT:
307+
throw new RestartResponseException(StudentPage.class);
308+
case TA:
309+
throw new RestartResponseException(GradebookPage.class);
310+
default:
311+
break;
312+
}
313+
}
293314
}

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/GradebookPage.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public class GradebookPage extends BasePage {
119119
public GradebookPage() {
120120
disableLink(this.gradebookPageLink);
121121

122-
if (this.role == null) {
122+
if (this.role == GbRole.NONE) {
123123
sendToAccessDeniedPage(getString("error.role"));
124124
}
125125

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/ImportExportPage.java

+2-13
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.sakaiproject.gradebookng.tool.pages;
1717

18-
import org.apache.wicket.RestartResponseException;
1918
import org.apache.wicket.ajax.AjaxRequestTarget;
2019
import org.apache.wicket.feedback.ExactLevelFeedbackMessageFilter;
2120
import org.apache.wicket.feedback.FeedbackMessage;
@@ -24,10 +23,8 @@
2423
import org.apache.wicket.markup.head.IHeaderResponse;
2524
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
2625
import org.apache.wicket.markup.html.WebMarkupContainer;
27-
import org.apache.wicket.request.mapper.parameter.PageParameters;
2826

2927
import org.sakaiproject.component.cover.ServerConfigurationService;
30-
import org.sakaiproject.gradebookng.business.GbRole;
3128
import org.sakaiproject.gradebookng.tool.component.GbFeedbackPanel;
3229
import org.sakaiproject.gradebookng.tool.panels.importExport.GradeImportUploadStep;
3330

@@ -56,18 +53,10 @@ public boolean accept(FeedbackMessage message) {
5653
public final GbFeedbackPanel errorFeedbackPanel = (GbFeedbackPanel) new GbFeedbackPanel("errorFeedbackPanel").setFilter(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR));
5754

5855
public ImportExportPage() {
59-
disableLink(this.importExportPageLink);
6056

61-
if (role == GbRole.NONE) {
62-
final PageParameters params = new PageParameters();
63-
params.add("message", getString("role.none"));
64-
throw new RestartResponseException(AccessDeniedPage.class, params);
65-
}
57+
defaultRoleChecksForInstructorOnlyPage();
6658

67-
// students cannot access this page; redirect to the StudentPage
68-
if (this.role == GbRole.STUDENT) {
69-
throw new RestartResponseException(StudentPage.class);
70-
}
59+
disableLink(this.importExportPageLink);
7160

7261
container = new WebMarkupContainer("gradebookImportExportContainer");
7362
container.setOutputMarkupId(true);

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/PermissionsPage.java

+3
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ public class PermissionsPage extends BasePage {
7272
private final Long ALL_CATEGORIES = new Long(-1);
7373

7474
public PermissionsPage() {
75+
76+
defaultRoleChecksForInstructorOnlyPage();
77+
7578
disableLink(this.permissionsPageLink);
7679
}
7780

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/SettingsPage.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -66,18 +66,22 @@ public class SettingsPage extends BasePage {
6666
SettingsGradingSchemaPanel gradingSchemaPanel;
6767

6868
public SettingsPage() {
69+
70+
defaultRoleChecksForInstructorOnlyPage();
71+
6972
disableLink(this.settingsPageLink);
7073
setShowGradeEntryToNonAdmins();
7174
}
7275

7376
public SettingsPage(final boolean gradeEntryExpanded, final boolean gradeReleaseExpanded,
7477
final boolean categoryExpanded, final boolean gradingSchemaExpanded) {
75-
disableLink(this.settingsPageLink);
78+
79+
this();
80+
7681
this.gradeEntryExpanded = gradeEntryExpanded;
7782
this.gradeReleaseExpanded = gradeReleaseExpanded;
7883
this.categoryExpanded = categoryExpanded;
7984
this.gradingSchemaExpanded = gradingSchemaExpanded;
80-
setShowGradeEntryToNonAdmins();
8185
}
8286

8387
private void setShowGradeEntryToNonAdmins() {

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/StudentPage.java

+5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.apache.wicket.model.Model;
2626
import org.apache.wicket.model.StringResourceModel;
2727
import org.sakaiproject.component.cover.ServerConfigurationService;
28+
import org.sakaiproject.gradebookng.business.GbRole;
2829
import org.sakaiproject.gradebookng.tool.panels.StudentGradeSummaryGradesPanel;
2930
import org.sakaiproject.user.api.User;
3031

@@ -41,6 +42,10 @@ public class StudentPage extends BasePage {
4142

4243
public StudentPage() {
4344

45+
if (role == GbRole.NONE) {
46+
sendToAccessDeniedPage(getString("error.role"));
47+
}
48+
4449
final User u = this.businessService.getCurrentUser();
4550

4651
final Map<String, Object> userData = new HashMap<>();

0 commit comments

Comments
 (0)