2015-04-02 3 views
1

Я создаю типы контента и добавляю компоненты контента, специфичные для клиента и поверенного. Все эти части имеют поля и/или сборщики контента и т. Д.Пытается скрыть содержимое частей контента Тип контента

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

Я хочу скрыть части содержимого адвоката, когда клиент вошел в систему.

Я попытался с помощью этого:

public override void Displaying(ShapeDisplayingContext context) 
    { 
    context.ShapeMetadata.OnDisplaying(displayedContext => { 
     var shape = context.Shape; 

     if (context.Shape.Part.Name == "Parts_AttorneyMatterPart") 
     { 
      var workContext = _workContextAccessor.GetContext(); 
      var user = workContext.CurrentUser; 
      var roles = user.As<UserRolesPart>().Roles; 

      if (!roles.Contains("Spaces Attorney")) 
      { 
       shape = null; 
      } 
     } 
     }); 
    } 

Где у меня есть содержательная часть под названием «AttorneyMatterPart», и где Attorney роль является «Пробелы Поверенный».

Эти типы и части содержимого были созданы в Admin Orchard. Единственное, что в моем модуле - это файл этого класса.

Но это не скроет часть контента, когда клиент вошел в систему. Я знаю, что мне нужно работать над логикой того, какие роли могут видеть вещи (добавление || условий для администратора и т. Д.). Пока я просто проверяю это.

Любая помощь приветствуется.

EDIT (Bounty Added) Я действительно в тупике относительно того, возможно ли это. Эта часть контента создается через пользовательский интерфейс администратора. При отслеживании формы я вижу в разделе «Контент» Model> ContentItem> AttorneyMatterPart. Я пробовал ShapeTableBuilder, и я пробовал OnDisplaying и OnDisplayed от ShapeDisplayingContext.

Если кто-то может предоставить рабочий образец, он будет очень признателен.

ответ

1

Когда содержательная часть создается с помощью администратора приборной панели, есть на самом деле не форма, чтобы сделать это, только отдельные формы для внутреннего содержимого полей ...

Итак, попробуйте этот

public override void Displaying(ShapeDisplayingContext context) { 
    context.ShapeMetadata.OnDisplaying(displayedContext => { 
    var shape = displayedContext.Shape; 

    if (shape.ContentPart != null 
     && shape.ContentPart.PartDefinition.Name == "PartName") { 
     var workContext = _workContextAccessor.GetContext(); 
     var user = workContext.CurrentUser; 

     if (user == null || !user.Has<UserRolesPart>() 
     || !user.As<UserRolesPart>().Roles.Contains("RoleName")) { 
     displayedContext.ChildContent = new System.Web.HtmlString(""); 
     } 
    } 
    }); 
} 

Смотрите мой ответ на OrchardPros

http://orchardpros.net/tickets/6914

Лучший

1

Отбрасывание переменной shape просто очистит локальную ссылку. Установка следующее Однако следует скрыть форму:

displayedContext.ShapeMetadata.Position = "-"; 

Также FYI это лучше не проверять роли пользователя есть, а создать пользовательское разрешение, добавить, что в роли пользователя, а затем проверить разрешения через

IAuthorizationService.TryCheckAccess() 
+0

Я думаю, что это не работает для меня, потому что я доступ к содержательной части неправильно. Я создал часть контента в пользовательском интерфейсе администратора. Правильно ли это: 'context.Shape.Part.Name ==" Parts_AttorneyMatterPart "'? – REMESQ

+0

Вы всегда можете проверить с помощью отладчика, что там, но я думаю, что вы хотите эту проверку для отображаемогоContext.ShapeMetadata.Type. – Piedone

+0

Непонятно, как предоставленный ответ не работает для вас. Как это происходит точно? –