Add new backend.allow_unsafe_markdown permission

This commit is contained in:
Luke Towers 2020-05-25 18:02:20 -06:00
parent 655c8011b9
commit 9ecfb4867b
3 changed files with 46 additions and 6 deletions

View File

@ -4,6 +4,7 @@ use App;
use Backend;
use BackendMenu;
use BackendAuth;
use Backend\Models\UserRole;
use Backend\Classes\WidgetManager;
use System\Classes\MailManager;
use System\Classes\CombineAssets;
@ -168,7 +169,12 @@ class ServiceProvider extends ModuleServiceProvider
'media.manage_media' => [
'label' => 'backend::lang.permissions.manage_media',
'tab' => 'system::lang.permissions.name',
]
],
'backend.allow_unsafe_markdown' => [
'label' => 'backend::lang.permissions.allow_unsafe_markdown',
'tab' => 'system::lang.permissions.name',
'roles' => UserRole::CODE_DEVELOPER,
],
]);
});
}

View File

@ -1,7 +1,8 @@
<?php namespace Backend\FormWidgets;
use BackendAuth;
use Html;
use Markdown;
use BackendAuth;
use Backend\Classes\FormWidgetBase;
/**
@ -42,12 +43,12 @@ class MarkdownEditor extends FormWidgetBase
//
/**
* @inheritDoc
* {@inheritDoc}
*/
protected $defaultAlias = 'markdown';
/**
* @inheritDoc
* {@inheritDoc}
*/
public function init()
{
@ -60,7 +61,7 @@ class MarkdownEditor extends FormWidgetBase
}
/**
* @inheritDoc
* {@inheritDoc}
*/
public function render()
{
@ -84,7 +85,7 @@ class MarkdownEditor extends FormWidgetBase
}
/**
* @inheritDoc
* {@inheritDoc}
*/
protected function loadAssets()
{
@ -93,6 +94,34 @@ class MarkdownEditor extends FormWidgetBase
$this->addJs('/modules/backend/formwidgets/codeeditor/assets/js/build-min.js', 'core');
}
/**
* Check to see if the generated HTML should be cleaned to remove any potential XSS
*
* @return boolean
*/
protected function shouldCleanHtml()
{
$user = BackendAuth::getUser();
return !$user || !$user->hasAccess('backend.allow_unsafe_markdown');
}
/**
* {@inheritDoc}
*/
public function getSaveValue($value)
{
if ($this->shouldCleanHtml()) {
$value = Html::clean($value);
}
return $value;
}
/**
* AJAX handler to render the markdown as HTML
*
* @return array ['preview' => $generatedHTML]
*/
public function onRefresh()
{
$value = post($this->getFieldName());
@ -100,6 +129,10 @@ class MarkdownEditor extends FormWidgetBase
? Markdown::parseSafe($value)
: Markdown::parse($value);
if ($this->shouldCleanHtml()) {
$previewHtml = Html::clean($previewHtml);
}
return [
'preview' => $previewHtml
];

View File

@ -567,6 +567,7 @@ return [
],
'permissions' => [
'manage_media' => 'Upload and manage media contents - images, videos, sounds, documents',
'allow_unsafe_markdown' => 'Use unsafe Markdown (can use HTML & JS)',
],
'mediafinder' => [
'label' => 'Media Finder',