master courses: don't show edit buttons for locked pages
test plan: * have a wiki page in a blueprint course that allows "teachers and students" to edit the page, but then lock the page (with content locked) * in the associated course, students (or anyone) shouldn't be able to visit the page's edit page and try to save changes to the page closes #CNVS-38060 Change-Id: I3c09ca42baa6735c183b686310e225ff035d367e Reviewed-on: https://gerrit.instructure.com/127351 Reviewed-by: Dan Minkevitch <dan@instructure.com> Tested-by: Jenkins QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com> Product-Review: James Williams <jamesw@instructure.com>
This commit is contained in:
parent
efd4bc145b
commit
bc1536dce5
|
@ -62,7 +62,9 @@ define [
|
||||||
# TODO: Consider allowing duplicating pages in other contexts
|
# TODO: Consider allowing duplicating pages in other contexts
|
||||||
DUPLICATE: !!@WIKI_RIGHTS.manage && @contextName == 'courses'
|
DUPLICATE: !!@WIKI_RIGHTS.manage && @contextName == 'courses'
|
||||||
|
|
||||||
json.cannot_edit_by_master_course = json.is_master_course_child_content && json.restricted_by_master_course
|
if json.is_master_course_child_content && json.restricted_by_master_course
|
||||||
|
json.cannot_delete_by_master_course = true
|
||||||
|
json.cannot_edit_by_master_course = json.master_course_restrictions.content
|
||||||
|
|
||||||
json.wiki_page_menu_tools = ENV.wiki_page_menu_tools || []
|
json.wiki_page_menu_tools = ENV.wiki_page_menu_tools || []
|
||||||
json.wiki_page_menu_tools.forEach (tool) =>
|
json.wiki_page_menu_tools.forEach (tool) =>
|
||||||
|
|
|
@ -166,7 +166,9 @@ define [
|
||||||
else
|
else
|
||||||
$.datetimeString(json.lock_info.unlock_at)
|
$.datetimeString(json.lock_info.unlock_at)
|
||||||
|
|
||||||
json.cannot_edit_by_master_course = json.is_master_course_child_content && json.restricted_by_master_course
|
if json.is_master_course_child_content && json.restricted_by_master_course
|
||||||
|
json.cannot_delete_by_master_course = true
|
||||||
|
json.cannot_edit_by_master_course = json.master_course_restrictions.content
|
||||||
|
|
||||||
json.wiki_page_menu_tools = ENV.wiki_page_menu_tools
|
json.wiki_page_menu_tools = ENV.wiki_page_menu_tools
|
||||||
_.each json.wiki_page_menu_tools, (tool) =>
|
_.each json.wiki_page_menu_tools, (tool) =>
|
||||||
|
|
|
@ -247,8 +247,8 @@ class ApplicationController < ActionController::Base
|
||||||
end
|
end
|
||||||
helper_method :master_courses?
|
helper_method :master_courses?
|
||||||
|
|
||||||
def setup_master_course_restrictions(objects, course)
|
def setup_master_course_restrictions(objects, course, user_can_edit: false)
|
||||||
return unless master_courses? && course.is_a?(Course) && course.grants_right?(@current_user, session, :read_as_admin)
|
return unless master_courses? && course.is_a?(Course) && (user_can_edit || course.grants_right?(@current_user, session, :read_as_admin))
|
||||||
|
|
||||||
if MasterCourses::MasterTemplate.is_master_course?(course)
|
if MasterCourses::MasterTemplate.is_master_course?(course)
|
||||||
MasterCourses::Restrictor.preload_default_template_restrictions(objects, course)
|
MasterCourses::Restrictor.preload_default_template_restrictions(objects, course)
|
||||||
|
@ -2108,8 +2108,8 @@ class ApplicationController < ActionController::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
if @page
|
if @page
|
||||||
if @context.wiki.grants_right?(@current_user, :manage)
|
if @page.grants_any_right?(@current_user, session, :update, :update_content)
|
||||||
mc_status = setup_master_course_restrictions(@page, @context)
|
mc_status = setup_master_course_restrictions(@page, @context, user_can_edit: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
hash[:WIKI_PAGE] = wiki_page_json(@page, @current_user, session, true, :deep_check_if_needed => true, :master_course_status => mc_status)
|
hash[:WIKI_PAGE] = wiki_page_json(@page, @current_user, session, true, :deep_check_if_needed => true, :master_course_status => mc_status)
|
||||||
|
|
|
@ -114,7 +114,7 @@ class WikiPagesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
if @page.grants_any_right?(@current_user, session, :update, :update_content)
|
if @page.grants_any_right?(@current_user, session, :update, :update_content) && !@page.editing_restricted?(:content)
|
||||||
set_master_course_js_env_data(@page, @context)
|
set_master_course_js_env_data(@page, @context)
|
||||||
|
|
||||||
js_env ConditionalRelease::Service.env_for @context
|
js_env ConditionalRelease::Service.env_for @context
|
||||||
|
|
|
@ -32,9 +32,11 @@
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
{{#if CAN.UPDATE_CONTENT}}
|
{{#unless cannot_edit_by_master_course}}
|
||||||
<a href="{{wiki_page_edit_path}}" class="btn edit-wiki"><i class="icon-edit"></i> {{#t 'buttons.edit'}}Edit{{/t}}</a>
|
{{#if CAN.UPDATE_CONTENT}}
|
||||||
{{/if}}
|
<a href="{{wiki_page_edit_path}}" class="btn edit-wiki"><i class="icon-edit"></i> {{#t 'buttons.edit'}}Edit{{/t}}</a>
|
||||||
|
{{/if}}
|
||||||
|
{{/unless}}
|
||||||
{{#if CAN.ACCESS_GEAR_MENU}}
|
{{#if CAN.ACCESS_GEAR_MENU}}
|
||||||
<div class="inline-block">
|
<div class="inline-block">
|
||||||
<a class="btn al-trigger" tabindex="0" role="button" href="#">
|
<a class="btn al-trigger" tabindex="0" role="button" href="#">
|
||||||
|
@ -42,7 +44,7 @@
|
||||||
<span class="screenreader-only">{{#t 'toolbar_menu.settings'}}Settings{{/t}}</span>
|
<span class="screenreader-only">{{#t 'toolbar_menu.settings'}}Settings{{/t}}</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="al-options">
|
<ul class="al-options">
|
||||||
{{#unless cannot_edit_by_master_course}}
|
{{#unless cannot_delete_by_master_course}}
|
||||||
{{#if CAN.DELETE}}
|
{{#if CAN.DELETE}}
|
||||||
<li><a href="#" class="icon-trash delete_page{{#unless deletable}} disabled{{/unless}}" {{#unless deletable}}aria-disabled="true"{{/unless}}>{{#t "delete_wiki"}}Delete{{/t}}</a></li>
|
<li><a href="#" class="icon-trash delete_page{{#unless deletable}} disabled{{/unless}}" {{#unless deletable}}aria-disabled="true"{{/unless}}>{{#t "delete_wiki"}}Delete{{/t}}</a></li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
<ul class="al-options">
|
<ul class="al-options">
|
||||||
{{#unless cannot_edit_by_master_course}}
|
{{#unless cannot_edit_by_master_course}}
|
||||||
<li><a href="#" class="icon-edit edit-menu-item" title="{{#t}}Edit{{/t}}">{{#t}}Edit{{/t}}</a></li>
|
<li><a href="#" class="icon-edit edit-menu-item" title="{{#t}}Edit{{/t}}">{{#t}}Edit{{/t}}</a></li>
|
||||||
|
{{/unless}}
|
||||||
|
{{#unless cannot_delete_by_master_course}}
|
||||||
<li>
|
<li>
|
||||||
<a href="#" class="icon-trash delete-menu-item{{#unless deletable}} disabled{{/unless}}"
|
<a href="#" class="icon-trash delete-menu-item{{#unless deletable}} disabled{{/unless}}"
|
||||||
title="{{#t}}Delete {{title}}{{/t}}" {{#unless deletable}}aria-disabled="true"{{/unless}}>
|
title="{{#t}}Delete {{title}}{{/t}}" {{#unless deletable}}aria-disabled="true"{{/unless}}>
|
||||||
|
|
|
@ -52,8 +52,7 @@ describe "master courses banner" do
|
||||||
expect(f('#blueprint-lock-banner')).to include_text('Content')
|
expect(f('#blueprint-lock-banner')).to include_text('Content')
|
||||||
run_master_course_migration(@master)
|
run_master_course_migration(@master)
|
||||||
get "/courses/#{@minion.id}/pages/#{@copy_page.id}/edit"
|
get "/courses/#{@minion.id}/pages/#{@copy_page.id}/edit"
|
||||||
expect(f('.edit-content')).not_to contain_css('#tinymce')
|
assert_flash_warning_message("You are not allowed to edit the page")
|
||||||
expect(f('#blueprint-lock-banner')).to include_text('Content')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "shows locked banner when locking", priority:"2", test_id: 3248173 do
|
it "shows locked banner when locking", priority:"2", test_id: 3248173 do
|
||||||
|
|
|
@ -43,7 +43,7 @@ describe "master courses - child courses - wiki page locking" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not show the edit/delete cog-menu options on the index when locked" do
|
it "should not show the edit/delete cog-menu options on the index when locked" do
|
||||||
@tag.update(restrictions: {:all => true})
|
@tag.update(restrictions: {:content => true})
|
||||||
|
|
||||||
get "/courses/#{@copy_to.id}/pages"
|
get "/courses/#{@copy_to.id}/pages"
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ describe "master courses - child courses - wiki page locking" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not show the delete option on the show page when locked" do
|
it "should not show the delete option on the show page when locked" do
|
||||||
@tag.update(restrictions: {:all => true})
|
@tag.update(restrictions: {:points => true})
|
||||||
|
|
||||||
get "/courses/#{@copy_to.id}/pages/#{@page_copy.url}"
|
get "/courses/#{@copy_to.id}/pages/#{@page_copy.url}"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue