MDL-66181 course: Only assign roles that the user is allowed to assign
authorAndrew Nicols <andrew@nicols.co.uk>
Thu, 18 Jul 2019 03:09:40 +0000 (11:09 +0800)
committerJenkins <jenkins@worker05.test.in.moodle.com>
Mon, 2 Sep 2019 15:04:35 +0000 (17:04 +0200)
course/edit.php
course/tests/behat/course_creation.feature

index 81626d8..2072fe0 100644 (file)
@@ -166,7 +166,11 @@ if ($editform->is_cancelled()) {
 
         if (!empty($CFG->creatornewroleid) and !is_viewing($context, NULL, 'moodle/role:assign') and !is_enrolled($context, NULL, 'moodle/role:assign')) {
             // Deal with course creators - enrol them internally with default role.
-            enrol_try_internal_enrol($course->id, $USER->id, $CFG->creatornewroleid);
+            if (user_can_assign($context, $CFG->creatornewroleid)) {
+                enrol_try_internal_enrol($course->id, $USER->id, $CFG->creatornewroleid);
+            } else {
+                enrol_try_internal_enrol($course->id, $USER->id);
+            }
         }
 
         // The URL to take them to if they chose save and display.
index 2596eb2..8571b97 100644 (file)
@@ -68,3 +68,48 @@ Feature: Managers can create courses
       | id_enddate_day | 24 |
       | id_enddate_month | October |
       | id_enddate_year | 2016 |
+
+  Scenario: Create a course as a custom course creator
+    Given the following "users" exist:
+      | username  | firstname | lastname | email          |
+      | kevin  | Kevin   | the        | kevin@example.com |
+    And the following "roles" exist:
+      | shortname | name    | archetype |
+      | creator   | Creator |           |
+    And the following "system role assigns" exist:
+      | user   | role    | contextlevel |
+      | kevin  | creator | System       |
+    And I log in as "admin"
+    And I set the following system permissions of "Creator" role:
+      | capability | permission |
+      | moodle/course:create | Allow |
+      | moodle/course:manageactivities | Allow |
+      | moodle/course:viewparticipants | Allow |
+      | moodle/role:assign | Allow |
+    And I log out
+    And I log in as "kevin"
+    And I am on site homepage
+    When I press "Add a new course"
+    And I set the following fields to these values:
+      | Course full name  | My first course |
+      | Course short name | myfirstcourse |
+    And I press "Save and display"
+    And I follow "Participants"
+    Then I should see "Kevin the"
+    And I should not see "Teacher"
+    And I log out
+    Given I log in as "admin"
+    And I define the allowed role assignments for the "Creator" role as:
+      | Teacher | Assignable |
+    And I log out
+    And I log in as "kevin"
+    And I am on site homepage
+    And I turn editing mode on
+    When I press "Add a new course"
+    And I set the following fields to these values:
+      | Course full name  | My second course |
+      | Course short name | mysecondcourse |
+    And I press "Save and display"
+    And I follow "Participants"
+    Then I should see "Kevin the"
+    And I should see "Teacher"