Skip to content

Commit 6c06cb9

Browse files
authored
Merge pull request #2844 from somiaj/permission-render-source
Add permissions to render problems with WebworkWebservice.
2 parents d3708c5 + 51d4a6f commit 6c06cb9

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

conf/defaults.config

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,13 @@ $authen{admin_module} = ['WeBWorK::Authen::Basic_TheLastOption'];
780780
modify_tags => "admin",
781781
edit_restricted_files => "admin",
782782

783+
# Permission to render problems using the WebworkWebservice.
784+
# Users with only webservice_render_problem can render problems with a provided filename.
785+
# Users with both permissions can also render problems with providing the problem source.
786+
# Note the Problem Editor requires having both permissions.
787+
webservice_render_problem => "login_proctor",
788+
webservice_render_source => "login_proctor",
789+
783790
##### Behavior of the interactive problem processor #####
784791
show_correct_answers_before_answer_date => "ta",
785792
show_solutions_before_answer_date => "ta",

lib/WebworkWebservice.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ sub command_permission {
257257
convertCodeToPGML => 'access_instructor_tools',
258258

259259
# WebworkWebservice::RenderProblem
260-
renderProblem => 'proctor_quiz_login',
260+
renderProblem => 'webservice_render_problem',
261261

262262
# WebworkWebservice::SetActions
263263
listGlobalSets => 'access_instructor_tools',

lib/WebworkWebservice/RenderProblem.pm

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ async sub renderProblem {
2626
# is enabled. That is an expensive method to always call here.
2727
debug(pretty_print_rh($rh)) if $WeBWorK::Debug::Enabled;
2828

29+
# If the problem source is provided, check user is allow to render problem source.
30+
if (!$ws->authz->hasPermissions($rh->{user}, 'webservice_render_source')
31+
&& ($rh->{problemSource} || $rh->{rawProblemSource} || $rh->{uriEncodedProblemSource}))
32+
{
33+
$ws->error_string(__PACKAGE__ . ": User $rh->{user} does not have permission to render problem source.");
34+
return {};
35+
}
36+
2937
my $problemSeed = $rh->{problemSeed} // '1234';
3038

3139
my $beginTime = Benchmark->new;

0 commit comments

Comments
 (0)