2016-05-11 3 views
0

Если вы строите интрасеть, мы хотим, чтобы пользователи могли загружать изображения для своих собственных документов (например, новости, записи в блогах и т. Д.). Однако доступ к средствам массовой информации позволяет пользователям также заменять изображения на существующих носителях.Umbraco 7 защищает изображения

Следовательно, они могут заменить мебель (например, логотип сайта и т. Д.), Поскольку все они будут находиться в папке с носителями.

Я понимаю, что пользователям может быть предоставлена ​​стартовая папка для дерева мультимедиа (аналогично редактированию документов), однако это означало бы, что каждый отдельный пользователь должен указать исходную точку, поскольку, похоже, любой способ сделать это в массе, например, посредством ролей или группировки пользователей.

Есть ли другое решение, например, сохранение мебели по-другому, чтобы только администраторы могли их редактировать?

ответ

0

Насколько я знаю, нет способа присвоить фактические права на мультимедийные объекты или папки.

Но на самом деле, если у вас есть верный способ узнать, какие начиная узел назначения, к которым пользователи, это не так сложно сделать это программно:

var userService = UmbracoContext.Current.Application.Services.UserService; 
var mediaService = UmbracoContext.Current.Application.Services.MediaService; 
int total; 

foreach (var user in userService.GetAll(0, 1000, out total)) 
{ 
    int targetMediaId = 0; 

    switch(user.UserType.Id) 
    { 
     case 123: 
      targetMediaId = 3; 
      break; 
     case 234: 
      targetMediaId = 5; 
      break; 
    } 
    user.StartMediaId = targetMediaId; 

    userService.Save(user); 
} 

я использовал UserType в качестве примера как вы можете знать, что назначить кому, поскольку я не знаю, как вы скажете в конце. В принципе вы можете «легко» зайти так далеко, как я, не знаю, создать папку мультимедиа для каждого пользователя и назначить ее в качестве стартового медиа-узла.

+0

Звучит неплохо - куда идет этот код? – YesGenesisCamel

+0

Он может пойти куда угодно, в основном. Вы можете поместить его в класс ApplicationEventHandler, чтобы он запускался при запуске - просто не забудьте удалить его снова, поэтому ot не запускается при каждом запуске после одного раза. Или поставьте макрос частичного просмотра, вставьте его на страницу и посетите страницу ONCE. Примером является однократное выполнение, но вы можете связать что-то подобное с событием UserService.SavingUser (я думаю, это имя), поэтому каждый новый пользователь имеет начальный узел, установленный при создании. –

+0

Спасибо, Jannik, но поскольку я новичок в этом, не знаю, где находится код. Вы ранее указали мне на App_Code для кодирования переднего конца, но как насчет бэк-офиса - где это физически сидит, т.е. файл .cs? – YesGenesisCamel

Смежные вопросы