2016-06-06 7 views
3

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

Например, у меня есть содержание, аналогичное следующему:

Sitecore 
|- Content 
    |- Home 
     | - WhatWeDo 
      | - Infrastructure 
      | - Training 
     | - Locations 
      | - Europe 
      | - North America 

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

Я создал роль «WhatWeDo» и получил разрешение на запись, переименование, создание и удаление элемента WhatWeDo и его потомков.

Теперь, если я добавлю роль «WhatWeDo» в роль «Публикация клиента», пользователи, которым предоставлена ​​роль «WhatWeDo», также имеют возможность публиковать, но у них есть возможность публиковать любой элемент в контенте дерево. т.е. отображается кнопка «Опубликовать» на ленте «Опубликовать».

В основном, когда я попытался найти это в Google, они говорят об ограничениях публикации. в диалоговом окне «Параметры публикации», но это бесполезно для меня в этом сценарии.

Я нашел это https://stackoverflow.com/a/6351649/1442308, но я не могу заставить это работать, и я подозреваю, что он связан с очень старой версией Sitecore и больше не применяется.

Я также обновил свой конфиг так, что публикации должны публиковать только, если читать и писать разрешения

<setting name="Publishing.CheckSecurity" > 
    <patch:attribute name="value" value="true" /> 
    </setting>  

Но это не оказало никакого влияния на ограничение пользователей публикации контента элементов дерева, что они не должны, как пользователь все еще может публиковать элементы в разделе «Местоположения» в дереве контента. т. е. кнопка публикации все еще видна на ленте «Опубликовать».

Мне нужно ограничить это, чтобы те пользователи, которым предоставлена ​​роль «WhatWeDo», могут публиковать только статью WhatWeDo и ее потомки и не имеют возможности публиковать какой-либо другой элемент в дереве контента. i.e Они должны иметь только кнопку публикации, видимую, когда они находятся в элементе WhatWeDo или любом из его потомков.

Update

Обновленный вопрос, чтобы сделать его более ясным, что я хочу, чтобы убедиться, что кнопка публикации не отображается на панели ленты.

ответ

4

Параметр Publishing.CheckSecurity используется при выполнении публикации, поэтому на самом деле публикуются только те элементы, к которым пользователь имеет доступ. Это не влияет на доступ к кнопке публикации ленты.

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

Update

Проба Workflow, которая предоставляется вне коробки есть все, что нужно, чтобы получить эту работу.Он имеет команды и действие автоматического публикации, а также параметры безопасности, применяемые для роли Sitecore Author Authoring.

sample workflow security

Поскольку вы уже применили безопасность ваших элементов контента, все, что вам нужно будет сделать, это назначить эти элементы в рабочем процессе выборки. Вы можете дублировать его и переименовать, если хотите. Вы также можете переименовать команду Approve для публикации.

Чтобы гарантировать, что стандартная кнопка публикации не появится на ленте, убедитесь, что эти пользователи не являются членами роли Sitecore Client Publishing.

+0

Я ищу, чтобы кнопка публикации на ленте была скрыта, если пользователь не должен публиковать.Я сделал несколько тестов. Для пользователя, которому была предоставлена ​​роль «WhoWeAre», у них есть кнопка «Опубликовать», видимая для элементов «Местоположения». Пользователь может опубликовать этот элемент, и если они не раскрываются, чтобы показать дополнительную информацию о диалоговом окне завершения, они не смогут увидеть сообщение о том, что элемент был пропущен. Большинство пользователей просто предполагают, что элемент был опубликован, и затем задаются вопросом, почему они не могут видеть свои изменения на реальном сайте. –

+0

Вы действительно не можете сделать это со стандартной кнопкой публикации. Видимость кнопки публикации ленты контролируется разрешениями на ее элемент определения в базовой базе данных. Он не смотрит на элемент, выбранный в редакторе содержимого. Лучше просто не предоставлять пользователям доступ к этой кнопке и вместо этого использовать рабочий процесс. –

+0

Я думаю, что @BenGolden прав. Вы не можете выбрать и выбрать, кто видит кнопку «Опубликовать», в зависимости от того, к каким разделам они имеют доступ. 1. Создайте настраиваемое правило Engine Engine, которое выполняет то, что вы хотите. 2. Создайте простой рабочий процесс с двумя состояниями (черновик и одобрен) и одно действие для публикации в проекте. Затем вы добавляете этот рабочий процесс к каждому шаблону, на котором требуется кнопка публикации. После этого вы создаете роль, называемую издателем, и предоставляете разрешения для этого рабочего процесса. Любой человек, который должен опубликовать, должен иметь эту роль. Если вам нравится, я могу предоставить подробную информацию для 2-го варианта – Gabbar

0

(Извините, но у меня нет опции комментариев включена еще.)

Я бы определенно пойти на вариант рабочих процессов. Как отмечено в комментариях, кнопка «Опубликовать» будет разрешена с помощью разрешений безопасности, но как общая способность, не зависящая от разрешений элементов. Если вы не хотите, чтобы кнопка «Опубликовать» отображалась, не вдаваясь в причудливые настройки, вы должны забыть эту опцию.

Вместо классической кнопки «Опубликовать» у пользователей будет кнопка рабочего процесса, запускающая действие публикации, на вкладке «Обзор». Это не повлияет на ваших конечных пользователей. Это даже заставит их привыкнуть к действиям рабочего процесса, которые вы могли бы использовать и уточнять позже в своем проекте. Вы можете воспользоваться этой возможностью, чтобы представить их в своем проекте, более того, он отлично подходит для ваших нужд.

Не стесняйтесь спрашивать, хотите ли вы более подробные объяснения того, как настроить такой рабочий процесс.

0

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

Вы можете найти более подробную информацию в этих блогах, но есть некоторые отличия для Sitecore 7.1+ в связи с изменениями в двигателе правил:

1. Создайте класс действия правила

В проекте Visual Studio создайте классы CommandRuleContext и SetCommandState, как указано в первом сообщении блога.

2. Создание правила в Sitecore

Это там, где было много обновлений в Sitecore 7.1+, третий пост в блоге объясняет новую структуру двигателя правил:

  1. Под /sitecore/system/Settings/Rules/Definitions/Tags создать новый тег под названием Command State

  2. Под /sitecore/system/Settings/Rules/Definitions создать новую папку с именем Command States в и добавьте 4 состояния, показанные на шаге 1.14

  3. Создать новый элемент Папка под названием /sitecore/system/Settings/Rules/Definitions/ElementsCommand Rules

  4. Вставьте новый Action в этой папке. Установите значения полей:

    Текст:set command state to [commandstateid,Tree,root=/sitecore/system/Settings/Rules/Definitions/Command States,specific command state]

    Тип:MyProject.Custom.Commands.SetCommandState, MyProject.Custom

  5. Выберите Tags/Default элемент и выберите Command State из списка тегов. Это тег, который мы определили ранее.

  6. Теперь под /sitecore/system/Settings/Rules вставьте новую «контекстную папку правил» под названием Command Rules, а затем добавьте новое правило в папку «Правила».

  7. Прежде чем мы создадим правило, нам необходимо связать теги, чтобы показать условия и действия. Еще раз выберите пункт «Метки/По умолчанию» и на этот раз выберите Command State и Item Security. Вы можете выбрать разные теги, если хотите использовать разные условия (например, иерархия предметов, информация о товаре, безопасность и т. Д.)

  8. Теперь создайте правило с условием, которое вам нужно, например.

Rule Description

3. Обновление команды, чтобы использовать правила

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

Создайте новый класс команды, унаследованный от существующей публикации команды:

using Sitecore.Data.Items; 
using Sitecore.Diagnostics; 
using Sitecore.Rules; 
using Sitecore.SecurityModel; 
using Sitecore.Shell.Framework.Commands; 

namespace MyProject.Custom.Commands 
{ 
    public class PermissionBasedPublish : Sitecore.Shell.Framework.Commands.PublishNow 
    { 
     public override CommandState QueryState(CommandContext context) 
     { 
      Assert.ArgumentNotNull(context, "context"); 
      var state = base.QueryState(context); 
      if (state != CommandState.Enabled) 
       return state; 

      return RunRules(context); 
     } 

     private CommandState RunRules(CommandContext context) 
     { 
      Item parentRuleItem; 

      var ruleContext = new CommandRuleContext(); 
      ruleContext.Item = context.Items[0]; 

      using (new SecurityDisabler()) 
      { 
       parentRuleItem = ruleContext.Item.Database.GetItem("/sitecore/system/Settings/Rules/Command Rules/Rules"); 
       if (parentRuleItem == null) 
        return CommandState.Enabled; 
      } 

      RuleList<CommandRuleContext> rules = RuleFactory.GetRules<CommandRuleContext>(parentRuleItem, "Rule"); 

      if (rules == null) 
       return CommandState.Enabled; 

      rules.Run(ruleContext); 
      return ruleContext.CommandState; 
     } 
    } 
} 

И теперь мы можем исправить в этой команде вместо установленного по умолчанию:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/"> 
    <sitecore> 
    <commands> 
     <command name="item:publishnow"> 
     <patch:attribute name="type">MyProject.Custom.Commands.PermissionBasedPublish, MyProject.Custom</patch:attribute> 
     </command> 
    </commands> 
    </sitecore> 
</configuration> 

видимость кнопки публикации теперь основывается на определенных правилах. С правилом, определенным выше, кнопка будет видна только в том случае, если у пользователя есть доступ на запись к текущему элементу, который они представляют собой.

Пользователю по-прежнему требуется разрешение на публикацию с использованием соответствующих ролей. Обратите внимание, что использование роли из коробки означает, что у пользователя также будет доступ к опции «Публичный сайт» из раскрывающегося списка. Вам необходимо ограничить доступ к /sitecore/content/Applications/Content Editor/Menues/Publish/Publish Site в базе данных Core и ярлык с рабочего стола, если это необходимо.

Вы также можете комбинировать это с настройкой Publishing.CheckSecurity, установив ее на true.

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

+0

Спасибо. Он очень подробно попытается сохранить его в моем takelit для дальнейшего использования. Эта ссылка http://chowson.github.io/security-based-publishing-restrictions-in-sitecore/ показывает другой способ скрыть кнопку публикации на основе разрешений на запись. –

+0

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

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

  • Нет связанных вопросов^_^