mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-26 03:40:56 +08:00
committed by
Sébastien Ros
parent
044f079e28
commit
8fc3963acb
@@ -45,12 +45,12 @@ namespace Orchard.ImageEditor.Controllers {
|
|||||||
|
|
||||||
[Themed(false)]
|
[Themed(false)]
|
||||||
public ActionResult Edit(string folderPath, string filename) {
|
public ActionResult Edit(string folderPath, string filename) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia))
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.EditMediaContent, folderPath))
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
|
||||||
// Check permission.
|
// Check permission.
|
||||||
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ namespace Orchard.ImageEditor.Controllers {
|
|||||||
|
|
||||||
// Check permission.
|
// Check permission.
|
||||||
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(media.FolderPath)) {
|
if (!Services.Authorizer.Authorize(Permissions.ImportMediaContent) && !_mediaLibraryService.CanManageMediaFolder(media.FolderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ namespace Orchard.MediaLibrary {
|
|||||||
builder.AddImageSet("media-library")
|
builder.AddImageSet("media-library")
|
||||||
.Add(T("Media"), "6",
|
.Add(T("Media"), "6",
|
||||||
menu => menu.Add(T("Media"), "0", item => item.Action("Index", "Admin", new { area = "Orchard.MediaLibrary" })
|
menu => menu.Add(T("Media"), "0", item => item.Action("Index", "Admin", new { area = "Orchard.MediaLibrary" })
|
||||||
.Permission(Permissions.ManageOwnMedia)));
|
.Permission(Permissions.ManageOwnMedia)
|
||||||
|
.Permission(Permissions.SelectMediaContent)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
|
using Orchard.ContentManagement.MetaData;
|
||||||
using Orchard.Core.Title.Models;
|
using Orchard.Core.Title.Models;
|
||||||
|
using Orchard.FileSystems.Media;
|
||||||
using Orchard.Localization;
|
using Orchard.Localization;
|
||||||
using Orchard.Logging;
|
using Orchard.Logging;
|
||||||
using Orchard.MediaLibrary.Models;
|
using Orchard.MediaLibrary.Models;
|
||||||
@@ -12,9 +14,7 @@ using Orchard.MediaLibrary.ViewModels;
|
|||||||
using Orchard.Mvc;
|
using Orchard.Mvc;
|
||||||
using Orchard.Themes;
|
using Orchard.Themes;
|
||||||
using Orchard.UI.Navigation;
|
using Orchard.UI.Navigation;
|
||||||
using Orchard.ContentManagement.MetaData;
|
|
||||||
using Orchard.Validation;
|
using Orchard.Validation;
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Orchard.MediaLibrary.Controllers {
|
namespace Orchard.MediaLibrary.Controllers {
|
||||||
[ValidateInput(false)]
|
[ValidateInput(false)]
|
||||||
@@ -22,15 +22,18 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
private readonly IMediaLibraryService _mediaLibraryService;
|
private readonly IMediaLibraryService _mediaLibraryService;
|
||||||
private readonly INavigationManager _navigationManager;
|
private readonly INavigationManager _navigationManager;
|
||||||
private readonly IContentDefinitionManager _contentDefinitionManager;
|
private readonly IContentDefinitionManager _contentDefinitionManager;
|
||||||
|
private readonly IStorageProvider _storageProvider;
|
||||||
|
|
||||||
public AdminController(
|
public AdminController(
|
||||||
IOrchardServices services,
|
IOrchardServices services,
|
||||||
IMediaLibraryService mediaLibraryService,
|
IMediaLibraryService mediaLibraryService,
|
||||||
INavigationManager navigationManager,
|
INavigationManager navigationManager,
|
||||||
IContentDefinitionManager contentDefinitionManager) {
|
IContentDefinitionManager contentDefinitionManager,
|
||||||
|
IStorageProvider storageProvider) {
|
||||||
_mediaLibraryService = mediaLibraryService;
|
_mediaLibraryService = mediaLibraryService;
|
||||||
_navigationManager = navigationManager;
|
_navigationManager = navigationManager;
|
||||||
_contentDefinitionManager = contentDefinitionManager;
|
_contentDefinitionManager = contentDefinitionManager;
|
||||||
|
_storageProvider = storageProvider;
|
||||||
Services = services;
|
Services = services;
|
||||||
|
|
||||||
T = NullLocalizer.Instance;
|
T = NullLocalizer.Instance;
|
||||||
@@ -42,12 +45,18 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
public ILogger Logger { get; set; }
|
public ILogger Logger { get; set; }
|
||||||
|
|
||||||
public ActionResult Index(string folderPath = "", bool dialog = false) {
|
public ActionResult Index(string folderPath = "", bool dialog = false) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Cannot view media")))
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.SelectMediaContent, folderPath)) {
|
||||||
|
Services.Notifier.Add(UI.Notify.NotifyType.Error, T("Cannot select media"));
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
var userMediaFolder = _mediaLibraryService.GetUserMediaFolder();
|
||||||
|
if (Services.Authorizer.Authorize(Permissions.ManageOwnMedia) && !Services.Authorizer.Authorize(Permissions.ManageMediaContent))
|
||||||
|
_storageProvider.TryCreateFolder(userMediaFolder.MediaPath);
|
||||||
|
|
||||||
// If the user is trying to access a folder above his boundaries, redirect him to his home folder
|
// If the user is trying to access a folder above his boundaries, redirect him to his home folder
|
||||||
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.SelectMediaContent, folderPath) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return RedirectToAction("Index", new { folderPath = rootMediaFolder.MediaPath, dialog });
|
return RedirectToAction("Index", new { folderPath = rootMediaFolder.MediaPath, dialog });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,8 +89,10 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult Import(string folderPath, int? replaceId = null) {
|
public ActionResult Import(string folderPath, int? replaceId = null) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Cannot import media")))
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
Services.Notifier.Add(UI.Notify.NotifyType.Error, T("Cannot import media"));
|
||||||
|
return RedirectToAction("Index", new { folderPath = folderPath });
|
||||||
|
}
|
||||||
|
|
||||||
var mediaProviderMenu = _navigationManager.BuildMenu("mediaproviders");
|
var mediaProviderMenu = _navigationManager.BuildMenu("mediaproviders");
|
||||||
var imageSets = _navigationManager.BuildImageSets("mediaproviders");
|
var imageSets = _navigationManager.BuildImageSets("mediaproviders");
|
||||||
@@ -99,7 +110,7 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
return HttpNotFound();
|
return HttpNotFound();
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(replaceMedia.FolderPath)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, folderPath) && !_mediaLibraryService.CanManageMediaFolder(replaceMedia.FolderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +118,7 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
viewModel.FolderPath = replaceMedia.FolderPath;
|
viewModel.FolderPath = replaceMedia.FolderPath;
|
||||||
} else {
|
} else {
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, folderPath) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -117,11 +128,19 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
[Themed(false)]
|
[Themed(false)]
|
||||||
public ActionResult MediaItems(string folderPath, int skip = 0, int count = 0, string order = "created", string mediaType = "") {
|
public ActionResult MediaItems(string folderPath, int skip = 0, int count = 0, string order = "created", string mediaType = "") {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Cannot view media")))
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.SelectMediaContent, folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
Services.Notifier.Add(UI.Notify.NotifyType.Error, T("Cannot select media"));
|
||||||
|
var model = new MediaManagerMediaItemsViewModel {
|
||||||
|
MediaItems = new List<MediaManagerMediaItemViewModel>(),
|
||||||
|
MediaItemsCount = 0,
|
||||||
|
FolderPath = folderPath
|
||||||
|
};
|
||||||
|
|
||||||
|
return View(model);
|
||||||
|
}
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.SelectMediaContent, folderPath) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
var model = new MediaManagerMediaItemsViewModel {
|
var model = new MediaManagerMediaItemsViewModel {
|
||||||
MediaItems = new List<MediaManagerMediaItemViewModel>(),
|
MediaItems = new List<MediaManagerMediaItemViewModel>(),
|
||||||
MediaItemsCount = 0,
|
MediaItemsCount = 0,
|
||||||
@@ -150,12 +169,18 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
[Themed(false)]
|
[Themed(false)]
|
||||||
public ActionResult ChildFolders(string folderPath = null) {
|
public ActionResult ChildFolders(string folderPath = null) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Cannot get child folder listing")))
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.SelectMediaContent, folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
Services.Notifier.Add(UI.Notify.NotifyType.Error, T("Cannot get child folder listing"));
|
||||||
|
var model = new MediaManagerChildFoldersViewModel {
|
||||||
|
Children = new IMediaFolder[0]
|
||||||
|
};
|
||||||
|
|
||||||
|
return View(model);
|
||||||
|
}
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
var model = new MediaManagerChildFoldersViewModel {
|
var model = new MediaManagerChildFoldersViewModel {
|
||||||
Children = new IMediaFolder[0]
|
Children = new IMediaFolder[0]
|
||||||
};
|
};
|
||||||
@@ -174,8 +199,10 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
[Themed(false)]
|
[Themed(false)]
|
||||||
public ActionResult RecentMediaItems(int skip = 0, int count = 0, string order = "created", string mediaType = "") {
|
public ActionResult RecentMediaItems(int skip = 0, int count = 0, string order = "created", string mediaType = "") {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Cannot view media")))
|
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
||||||
|
Services.Notifier.Add(UI.Notify.NotifyType.Error, T("Cannot view media"));
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
|
|
||||||
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
||||||
var rootMediaFolderPath = rootMediaFolder == null ? null : rootMediaFolder.MediaPath;
|
var rootMediaFolderPath = rootMediaFolder == null ? null : rootMediaFolder.MediaPath;
|
||||||
@@ -203,9 +230,10 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
if (contentItem == null)
|
if (contentItem == null)
|
||||||
return HttpNotFound();
|
return HttpNotFound();
|
||||||
|
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, contentItem, T("Cannot view media"))
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.SelectMediaContent, contentItem.FolderPath)) {
|
||||||
|| !_mediaLibraryService.CanManageMediaFolder(contentItem.FolderPath))
|
Services.Notifier.Add(UI.Notify.NotifyType.Error, T("Cannot select media"));
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
|
|
||||||
dynamic model = Services.ContentManager.BuildDisplay(contentItem, displayType);
|
dynamic model = Services.ContentManager.BuildDisplay(contentItem, displayType);
|
||||||
|
|
||||||
@@ -214,8 +242,10 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public ActionResult Delete(int[] mediaItemIds) {
|
public ActionResult Delete(int[] mediaItemIds) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Couldn't delete media items")))
|
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
||||||
|
Services.Notifier.Add(UI.Notify.NotifyType.Error, T("Couldn't delete media items"));
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
|
|
||||||
var mediaItems = Services.ContentManager
|
var mediaItems = Services.ContentManager
|
||||||
.Query(VersionOptions.Latest)
|
.Query(VersionOptions.Latest)
|
||||||
@@ -226,9 +256,10 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
foreach (var media in mediaItems) {
|
foreach (var media in mediaItems) {
|
||||||
if (_mediaLibraryService.CanManageMediaFolder(media.FolderPath)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.DeleteMediaContent, media.FolderPath)) {
|
||||||
Services.ContentManager.Remove(media.ContentItem);
|
return Json(false);
|
||||||
}
|
}
|
||||||
|
Services.ContentManager.Remove(media.ContentItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Json(true);
|
return Json(true);
|
||||||
@@ -241,14 +272,16 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public ActionResult Clone(int mediaItemId) {
|
public ActionResult Clone(int mediaItemId) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Couldn't clone media items")))
|
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
||||||
|
Services.Notifier.Add(UI.Notify.NotifyType.Error, T("Couldn't clone media items"));
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var media = Services.ContentManager.Get(mediaItemId).As<MediaPart>();
|
var media = Services.ContentManager.Get(mediaItemId).As<MediaPart>();
|
||||||
|
|
||||||
if (!_mediaLibraryService.CanManageMediaFolder(media.FolderPath)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, media.FolderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return Json(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
var newFileName = _mediaLibraryService.GetUniqueFilename(media.FolderPath, media.FileName);
|
var newFileName = _mediaLibraryService.GetUniqueFilename(media.FolderPath, media.FileName);
|
||||||
|
|||||||
@@ -35,12 +35,12 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
public ILogger Logger { get; set; }
|
public ILogger Logger { get; set; }
|
||||||
|
|
||||||
public ActionResult Index(string folderPath, string type, int? replaceId = null) {
|
public ActionResult Index(string folderPath, string type, int? replaceId = null) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.SelectMediaContent, folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,12 +62,12 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public ActionResult Upload(string folderPath, string type) {
|
public ActionResult Upload(string folderPath, string type) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +135,8 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
return HttpNotFound();
|
return HttpNotFound();
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(replaceMedia.FolderPath)) {
|
if (!(_mediaLibraryService.CheckMediaFolderPermission(Permissions.EditMediaContent, replaceMedia.FolderPath) && _mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, replaceMedia.FolderPath))
|
||||||
|
&& !_mediaLibraryService.CanManageMediaFolder(replaceMedia.FolderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,12 +32,14 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
public Localizer T { get; set; }
|
public Localizer T { get; set; }
|
||||||
|
|
||||||
public ActionResult Create(string folderPath) {
|
public ActionResult Create(string folderPath) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Couldn't create media folder")))
|
if (!(_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, folderPath) || _mediaLibraryService.CheckMediaFolderPermission(Permissions.EditMediaContent, folderPath))) {
|
||||||
return new HttpUnauthorizedResult();
|
Services.Notifier.Error(T("Couldn't create media folder"));
|
||||||
|
return RedirectToAction("Index", "Admin", new { area = "Orchard.MediaLibrary", folderPath = folderPath });
|
||||||
|
}
|
||||||
|
|
||||||
// If the user is trying to access a folder above his boundaries, redirect him to his home folder
|
// If the user is trying to access a folder above his boundaries, redirect him to his home folder
|
||||||
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
var rootMediaFolder = _mediaLibraryService.GetRootMediaFolder();
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return RedirectToAction("Create", new { folderPath = rootMediaFolder.MediaPath });
|
return RedirectToAction("Create", new { folderPath = rootMediaFolder.MediaPath });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,13 +53,16 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
[HttpPost, ActionName("Create")]
|
[HttpPost, ActionName("Create")]
|
||||||
public ActionResult Create() {
|
public ActionResult Create() {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Couldn't create media folder")))
|
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
||||||
|
Services.Notifier.Error(T("Couldn't create media folder"));
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
|
|
||||||
var viewModel = new MediaManagerFolderCreateViewModel();
|
var viewModel = new MediaManagerFolderCreateViewModel();
|
||||||
UpdateModel(viewModel);
|
UpdateModel(viewModel);
|
||||||
|
|
||||||
if (!_mediaLibraryService.CanManageMediaFolder(viewModel.FolderPath)) {
|
if (!(_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, viewModel.FolderPath)
|
||||||
|
|| _mediaLibraryService.CheckMediaFolderPermission(Permissions.EditMediaContent, viewModel.FolderPath))) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,8 +81,10 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult Edit(string folderPath) {
|
public ActionResult Edit(string folderPath) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Couldn't edit media folder")))
|
if (!(_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, folderPath) || _mediaLibraryService.CheckMediaFolderPermission(Permissions.EditMediaContent, folderPath))) {
|
||||||
return new HttpUnauthorizedResult();
|
Services.Notifier.Error(T("Couldn't edit media folder"));
|
||||||
|
return RedirectToAction("Index", "Admin", new { area = "Orchard.MediaLibrary", folderPath = folderPath });
|
||||||
|
}
|
||||||
|
|
||||||
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
@@ -88,6 +95,10 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Shouldn't be able to rename Users folder
|
||||||
|
if (folderPath == "Users") {
|
||||||
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
|
|
||||||
var viewModel = new MediaManagerFolderEditViewModel {
|
var viewModel = new MediaManagerFolderEditViewModel {
|
||||||
FolderPath = folderPath,
|
FolderPath = folderPath,
|
||||||
@@ -100,13 +111,16 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
[HttpPost, ActionName("Edit")]
|
[HttpPost, ActionName("Edit")]
|
||||||
[FormValueRequired("submit.Save")]
|
[FormValueRequired("submit.Save")]
|
||||||
public ActionResult Edit() {
|
public ActionResult Edit() {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Couldn't edit media folder")))
|
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
||||||
|
Services.Notifier.Error(T("Couldn't edit media folder"));
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
|
|
||||||
var viewModel = new MediaManagerFolderEditViewModel();
|
var viewModel = new MediaManagerFolderEditViewModel();
|
||||||
UpdateModel(viewModel);
|
UpdateModel(viewModel);
|
||||||
|
|
||||||
if (!_mediaLibraryService.CanManageMediaFolder(viewModel.FolderPath)) {
|
if (!(_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, viewModel.FolderPath)
|
||||||
|
|| _mediaLibraryService.CheckMediaFolderPermission(Permissions.EditMediaContent, viewModel.FolderPath))) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,16 +144,18 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
[HttpPost, ActionName("Edit")]
|
[HttpPost, ActionName("Edit")]
|
||||||
[FormValueRequired("submit.Delete")]
|
[FormValueRequired("submit.Delete")]
|
||||||
public ActionResult Delete() {
|
public ActionResult Delete() {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Couldn't delete media folder")))
|
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
||||||
|
Services.Notifier.Error(T("Couldn't delete media folder"));
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
|
|
||||||
var viewModel = new MediaManagerFolderEditViewModel();
|
var viewModel = new MediaManagerFolderEditViewModel();
|
||||||
UpdateModel(viewModel);
|
UpdateModel(viewModel);
|
||||||
|
|
||||||
if (!_mediaLibraryService.CanManageMediaFolder(viewModel.FolderPath)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.DeleteMediaContent, viewModel.FolderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
_mediaLibraryService.DeleteFolder(viewModel.FolderPath);
|
_mediaLibraryService.DeleteFolder(viewModel.FolderPath);
|
||||||
Services.Notifier.Information(T("Media folder deleted"));
|
Services.Notifier.Information(T("Media folder deleted"));
|
||||||
@@ -155,8 +171,11 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public ActionResult Move(string folderPath, int[] mediaItemIds) {
|
public ActionResult Move(string folderPath, int[] mediaItemIds) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia, T("Couldn't move media items")))
|
// check permission on destination folder
|
||||||
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, folderPath)) {
|
||||||
|
Services.Notifier.Error(T("Couldn't move media items"));
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
|
|
||||||
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
@@ -166,6 +185,10 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
// don't try to rename the file if there is no associated media file
|
// don't try to rename the file if there is no associated media file
|
||||||
if (!string.IsNullOrEmpty(media.FileName)) {
|
if (!string.IsNullOrEmpty(media.FileName)) {
|
||||||
|
// check permission on source folder
|
||||||
|
if(!_mediaLibraryService.CheckMediaFolderPermission(Permissions.DeleteMediaContent, media.FolderPath)) {
|
||||||
|
return new HttpUnauthorizedResult();
|
||||||
|
}
|
||||||
var uniqueFilename = _mediaLibraryService.GetUniqueFilename(folderPath, media.FileName);
|
var uniqueFilename = _mediaLibraryService.GetUniqueFilename(folderPath, media.FileName);
|
||||||
_mediaLibraryService.MoveFile(media.FolderPath, media.FileName, folderPath, uniqueFilename);
|
_mediaLibraryService.MoveFile(media.FolderPath, media.FileName, folderPath, uniqueFilename);
|
||||||
media.FileName = uniqueFilename;
|
media.FileName = uniqueFilename;
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
public Localizer T { get; set; }
|
public Localizer T { get; set; }
|
||||||
|
|
||||||
public ActionResult Index(string folderPath, string type, int? replaceId) {
|
public ActionResult Index(string folderPath, string type, int? replaceId) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia))
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.SelectMediaContent, folderPath))
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,12 +147,12 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
[HttpPost, ValidateInput(false)]
|
[HttpPost, ValidateInput(false)]
|
||||||
public ActionResult Import(string folderPath, string url, string document) {
|
public ActionResult Import(string folderPath, string url, string document) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,7 +203,8 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
return HttpNotFound();
|
return HttpNotFound();
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(replaceMedia.FolderPath)) {
|
if (!(_mediaLibraryService.CheckMediaFolderPermission(Permissions.EditMediaContent, replaceMedia.FolderPath) && _mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, replaceMedia.FolderPath))
|
||||||
|
&& !_mediaLibraryService.CanManageMediaFolder(replaceMedia.FolderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,12 +35,12 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
public Localizer T { get; set; }
|
public Localizer T { get; set; }
|
||||||
|
|
||||||
public ActionResult Index(string folderPath, string type, int? replaceId = null) {
|
public ActionResult Index(string folderPath, string type, int? replaceId = null) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.SelectMediaContent, folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,11 +62,11 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public ActionResult Import(string folderPath, string type, string url) {
|
public ActionResult Import(string folderPath, string type, string url) {
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageOwnMedia))
|
if (!_mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, folderPath))
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
if (!_mediaLibraryService.CanManageMediaFolder(folderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,7 +109,8 @@ namespace Orchard.MediaLibrary.Controllers {
|
|||||||
return HttpNotFound();
|
return HttpNotFound();
|
||||||
|
|
||||||
// Check permission
|
// Check permission
|
||||||
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent) && !_mediaLibraryService.CanManageMediaFolder(replaceMedia.FolderPath)) {
|
if (!(_mediaLibraryService.CheckMediaFolderPermission(Permissions.EditMediaContent, replaceMedia.FolderPath) && _mediaLibraryService.CheckMediaFolderPermission(Permissions.ImportMediaContent, replaceMedia.FolderPath))
|
||||||
|
&& !_mediaLibraryService.CanManageMediaFolder(replaceMedia.FolderPath)) {
|
||||||
return new HttpUnauthorizedResult();
|
return new HttpUnauthorizedResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace Orchard.MediaLibrary.MediaFileName
|
|||||||
"Parts_Media_Edit_FileName",
|
"Parts_Media_Edit_FileName",
|
||||||
() => {
|
() => {
|
||||||
var currentUser = _authenticationService.GetAuthenticatedUser();
|
var currentUser = _authenticationService.GetAuthenticatedUser();
|
||||||
if (!_authorizationService.TryCheckAccess(Permissions.ManageMediaContent, currentUser, part)) {
|
if (!_authorizationService.TryCheckAccess(Permissions.EditMediaContent, currentUser, part)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,13 +5,21 @@ using Orchard.Security.Permissions;
|
|||||||
namespace Orchard.MediaLibrary {
|
namespace Orchard.MediaLibrary {
|
||||||
public class Permissions : IPermissionProvider {
|
public class Permissions : IPermissionProvider {
|
||||||
public static readonly Permission ManageMediaContent = new Permission { Description = "Manage Media", Name = "ManageMediaContent" };
|
public static readonly Permission ManageMediaContent = new Permission { Description = "Manage Media", Name = "ManageMediaContent" };
|
||||||
public static readonly Permission ManageOwnMedia = new Permission { Description = "Manage Own Media", Name = "ManageOwnMedia", ImpliedBy = new[] { ManageMediaContent } };
|
public static readonly Permission ImportMediaContent = new Permission { Description = "Import All Media", Name = "ImportMedia", ImpliedBy = new[] { ManageMediaContent } };
|
||||||
|
public static readonly Permission EditMediaContent = new Permission { Description = "Edit All Media", Name = "EditMedia", ImpliedBy = new[] { ManageMediaContent } };
|
||||||
|
public static readonly Permission DeleteMediaContent = new Permission { Description = "Delete All Media", Name = "DeleteMedia", ImpliedBy = new[] { ManageMediaContent } };
|
||||||
|
public static readonly Permission SelectMediaContent = new Permission { Description = "Select All Media", Name = "SelectMedia", ImpliedBy = new[] { ManageMediaContent, ImportMediaContent, EditMediaContent, DeleteMediaContent } };
|
||||||
|
public static readonly Permission ManageOwnMedia = new Permission { Description = "Manage Own Media", Name = "ManageOwnMedia", ImpliedBy = new[] { ManageMediaContent, SelectMediaContent, ImportMediaContent, EditMediaContent, DeleteMediaContent } };
|
||||||
|
|
||||||
public virtual Feature Feature { get; set; }
|
public virtual Feature Feature { get; set; }
|
||||||
|
|
||||||
public IEnumerable<Permission> GetPermissions() {
|
public IEnumerable<Permission> GetPermissions() {
|
||||||
return new[] {
|
return new[] {
|
||||||
ManageMediaContent,
|
ManageMediaContent,
|
||||||
|
ImportMediaContent,
|
||||||
|
EditMediaContent,
|
||||||
|
DeleteMediaContent,
|
||||||
|
SelectMediaContent,
|
||||||
ManageOwnMedia,
|
ManageOwnMedia,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ namespace Orchard.MediaLibrary.Providers {
|
|||||||
builder.AddImageSet("clientstorage")
|
builder.AddImageSet("clientstorage")
|
||||||
.Add(T("My Computer"), "5",
|
.Add(T("My Computer"), "5",
|
||||||
menu => menu.Action("Index", "ClientStorage", new { area = "Orchard.MediaLibrary" })
|
menu => menu.Action("Index", "ClientStorage", new { area = "Orchard.MediaLibrary" })
|
||||||
.Permission(Permissions.ManageOwnMedia));
|
.Permission(Permissions.ManageOwnMedia)
|
||||||
|
.Permission(Permissions.ImportMediaContent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,8 @@ namespace Orchard.MediaLibrary.Providers {
|
|||||||
builder.AddImageSet("oembed")
|
builder.AddImageSet("oembed")
|
||||||
.Add(T("Media Url"), "10",
|
.Add(T("Media Url"), "10",
|
||||||
menu => menu.Action("Index", "OEmbed", new { area = "Orchard.MediaLibrary" })
|
menu => menu.Action("Index", "OEmbed", new { area = "Orchard.MediaLibrary" })
|
||||||
.Permission(Permissions.ManageOwnMedia));
|
.Permission(Permissions.ManageOwnMedia)
|
||||||
|
.Permission(Permissions.ImportMediaContent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,8 @@ namespace Orchard.MediaLibrary.Providers {
|
|||||||
builder.AddImageSet("websearch")
|
builder.AddImageSet("websearch")
|
||||||
.Add(T("Web Search"), "7",
|
.Add(T("Web Search"), "7",
|
||||||
menu => menu.Action("Index", "WebSearch", new { area = "Orchard.MediaLibrary" })
|
menu => menu.Action("Index", "WebSearch", new { area = "Orchard.MediaLibrary" })
|
||||||
.Permission(Permissions.ManageOwnMedia));
|
.Permission(Permissions.ManageOwnMedia)
|
||||||
|
.Permission(Permissions.ImportMediaContent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -383,7 +383,8 @@ $(function () {
|
|||||||
$.ajax({
|
$.ajax({
|
||||||
type: "GET",
|
type: "GET",
|
||||||
url: url,
|
url: url,
|
||||||
cache: false
|
cache: false,
|
||||||
|
dataType: 'json'
|
||||||
}).done(function (data) {
|
}).done(function (data) {
|
||||||
var newChildFolders = data.childFolders;
|
var newChildFolders = data.childFolders;
|
||||||
|
|
||||||
@@ -586,6 +587,7 @@ $(function () {
|
|||||||
viewModel.clearSelection();
|
viewModel.clearSelection();
|
||||||
} else {
|
} else {
|
||||||
console.log('failed to delete media items');
|
console.log('failed to delete media items');
|
||||||
|
alert(settings.unauthorizedMessage);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
@@ -620,6 +622,7 @@ $(function () {
|
|||||||
viewModel.getMediaItems(viewModel.pageCount);
|
viewModel.getMediaItems(viewModel.pageCount);
|
||||||
} else {
|
} else {
|
||||||
console.log('failed to clone media items');
|
console.log('failed to clone media items');
|
||||||
|
alert(settings.unauthorizedMessage);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -21,14 +21,7 @@ namespace Orchard.MediaLibrary.Security {
|
|||||||
public void Adjust(CheckAccessContext context) {
|
public void Adjust(CheckAccessContext context) {
|
||||||
var mediaPart = context.Content.As<MediaPart>();
|
var mediaPart = context.Content.As<MediaPart>();
|
||||||
if (mediaPart != null) {
|
if (mediaPart != null) {
|
||||||
if(_authorizer.Authorize(Permissions.ManageMediaContent)) {
|
context.Granted = _mediaLibraryService.CheckMediaFolderPermission(context.Permission, mediaPart.FolderPath);
|
||||||
context.Granted = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_authorizer.Authorize(Permissions.ManageOwnMedia)) {
|
|
||||||
context.Granted = _mediaLibraryService.CanManageMediaFolder(mediaPart.FolderPath);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace Orchard.MediaLibrary.Services {
|
|||||||
MediaPart ImportMedia(Stream stream, string relativePath, string filename);
|
MediaPart ImportMedia(Stream stream, string relativePath, string filename);
|
||||||
MediaPart ImportMedia(Stream stream, string relativePath, string filename, string contentType);
|
MediaPart ImportMedia(Stream stream, string relativePath, string filename, string contentType);
|
||||||
IMediaFactory GetMediaFactory(Stream stream, string mimeType, string contentType);
|
IMediaFactory GetMediaFactory(Stream stream, string mimeType, string contentType);
|
||||||
|
bool CheckMediaFolderPermission(Orchard.Security.Permissions.Permission permission, string folderPath);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a unique filename to prevent filename collisions.
|
/// Creates a unique filename to prevent filename collisions.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -41,6 +41,8 @@ namespace Orchard.MediaLibrary.Services {
|
|||||||
|
|
||||||
IMediaFolder GetRootMediaFolder();
|
IMediaFolder GetRootMediaFolder();
|
||||||
|
|
||||||
|
IMediaFolder GetUserMediaFolder();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Retrieves the media folders within a given relative path.
|
/// Retrieves the media folders within a given relative path.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ namespace Orchard.MediaLibrary.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IMediaFolder GetRootMediaFolder() {
|
public IMediaFolder GetRootMediaFolder() {
|
||||||
if (_orchardServices.Authorizer.Authorize(Permissions.ManageMediaContent)) {
|
if (_orchardServices.Authorizer.Authorize(Permissions.SelectMediaContent)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,6 +242,39 @@ namespace Orchard.MediaLibrary.Services {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IMediaFolder GetUserMediaFolder() {
|
||||||
|
var currentUser = _orchardServices.WorkContext.CurrentUser;
|
||||||
|
var userPath = _storageProvider.Combine("Users", _mediaFolderProvider.GetFolderName(currentUser));
|
||||||
|
return new MediaFolder() {
|
||||||
|
Name = currentUser.UserName,
|
||||||
|
MediaPath = userPath
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CheckMediaFolderPermission(Orchard.Security.Permissions.Permission permission, string folderPath) {
|
||||||
|
if (_orchardServices.Authorizer.Authorize(Permissions.ManageMediaContent)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (_orchardServices.WorkContext.CurrentUser==null)
|
||||||
|
return _orchardServices.Authorizer.Authorize(permission);
|
||||||
|
// determines the folder type: public, user own folder (my), folder of another user (private)
|
||||||
|
var rootedFolderPath = this.GetRootedFolderPath(folderPath) ?? "";
|
||||||
|
var userFolderPath = GetUserMediaFolder().MediaPath;
|
||||||
|
bool isMyfolder = false;
|
||||||
|
|
||||||
|
if (rootedFolderPath.StartsWith(userFolderPath)) {
|
||||||
|
// the folder is the user's private path or one of its subfolders
|
||||||
|
isMyfolder = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isMyfolder) {
|
||||||
|
return _orchardServices.Authorizer.Authorize(Permissions.ManageOwnMedia);
|
||||||
|
}
|
||||||
|
else { // other
|
||||||
|
return _orchardServices.Authorizer.Authorize(permission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Retrieves the media folders within a given relative path.
|
/// Retrieves the media folders within a given relative path.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -60,7 +60,8 @@ namespace Orchard.MediaLibrary.Services {
|
|||||||
UrlHelper url) {
|
UrlHelper url) {
|
||||||
|
|
||||||
var user = _membershipService.ValidateUser(userName, password);
|
var user = _membershipService.ValidateUser(userName, password);
|
||||||
if (!_authorizationService.TryCheckAccess(Permissions.ManageOwnMedia, user, null)) {
|
if (!_authorizationService.TryCheckAccess(Permissions.ManageOwnMedia, user, null)
|
||||||
|
&& !_authorizationService.TryCheckAccess(Permissions.EditMediaContent, user, null)) {
|
||||||
throw new OrchardCoreException(T("Access denied"));
|
throw new OrchardCoreException(T("Access denied"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +74,7 @@ namespace Orchard.MediaLibrary.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If the user only has access to his own folder, rewrite the folder name
|
// If the user only has access to his own folder, rewrite the folder name
|
||||||
if (!_authorizationService.TryCheckAccess(Permissions.ManageMediaContent, user, null)) {
|
if (!_authorizationService.TryCheckAccess(Permissions.EditMediaContent, user, null)) {
|
||||||
directoryName = Path.Combine(_mediaLibraryService.GetRootedFolderPath(directoryName));
|
directoryName = Path.Combine(_mediaLibraryService.GetRootedFolderPath(directoryName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ var mediaLibrarySettings = {
|
|||||||
cloneConfirmationMessage: '@HttpUtility.JavaScriptStringEncode(T("Are you sure you want to clone this media item ?").Text)',
|
cloneConfirmationMessage: '@HttpUtility.JavaScriptStringEncode(T("Are you sure you want to clone this media item ?").Text)',
|
||||||
replaceConfirmationMessage: '@HttpUtility.JavaScriptStringEncode(T("Are you sure you want to replace this media item ?").Text)',
|
replaceConfirmationMessage: '@HttpUtility.JavaScriptStringEncode(T("Are you sure you want to replace this media item ?").Text)',
|
||||||
errorMessage: '@HttpUtility.JavaScriptStringEncode(T("An unexpected error occured, please refresh the page and try again.").Text)',
|
errorMessage: '@HttpUtility.JavaScriptStringEncode(T("An unexpected error occured, please refresh the page and try again.").Text)',
|
||||||
|
unauthorizedMessage: '@HttpUtility.JavaScriptStringEncode(T("Access denied").Text)',
|
||||||
antiForgeryToken: '@Html.AntiForgeryTokenValueOrchard()',
|
antiForgeryToken: '@Html.AntiForgeryTokenValueOrchard()',
|
||||||
childFolders: (@Display.Partial(TemplateName: "ChildFolders", Model: viewModel.ChildFoldersViewModel))['childFolders']
|
childFolders: (@Display.Partial(TemplateName: "ChildFolders", Model: viewModel.ChildFoldersViewModel))['childFolders']
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,10 +4,12 @@
|
|||||||
@{
|
@{
|
||||||
ContentItem contentItem = Model.ContentItem;
|
ContentItem contentItem = Model.ContentItem;
|
||||||
var draftable = contentItem.TypeDefinition.Settings.GetModel<ContentTypeSettings>().Draftable;
|
var draftable = contentItem.TypeDefinition.Settings.GetModel<ContentTypeSettings>().Draftable;
|
||||||
|
var media = contentItem.As<Orchard.MediaLibrary.Models.MediaPart>();
|
||||||
|
var mediaService = WorkContext.Resolve<Orchard.MediaLibrary.Services.IMediaLibraryService>();
|
||||||
}
|
}
|
||||||
|
|
||||||
<div id="media-actions">
|
<div id="media-actions">
|
||||||
@if (Authorizer.Authorize(Permissions.EditContent, contentItem)) {
|
@if (mediaService.CheckMediaFolderPermission(Orchard.MediaLibrary.Permissions.EditMediaContent, media.FolderPath)) {
|
||||||
@Html.Link(T("Edit").Text, Url.ItemEditUrl(contentItem), new { @class = "button", id = "edit-media-link" })
|
@Html.Link(T("Edit").Text, Url.ItemEditUrl(contentItem), new { @class = "button", id = "edit-media-link" })
|
||||||
}
|
}
|
||||||
@if (Authorizer.Authorize(Permissions.PublishContent, contentItem) && draftable) {
|
@if (Authorizer.Authorize(Permissions.PublishContent, contentItem) && draftable) {
|
||||||
|
|||||||
Reference in New Issue
Block a user