Есть ли какой-либо способ в Sitecore, который я могу создать роль/пользователь, который может просматривать и редактировать свои собственные созданные объекты? Если нет, как я могу сделать это возможным?Как вы можете установить безопасность, чтобы пользователь мог видеть или редактировать свои объекты только в Sitecore?
ответ
Чтобы исправить это, я добавил элемент: созданное событие в файле sitecore/events config.
<event name="item:created" xdt:Transform="Replace" xdt:Locator="Match(name)">
<handler type="Sirano.Dev.ItemEventHandlers.CustomItemEventHandler, Sirano.Dev" method="OnItemCreated" />
</event>
Это событие Виль запустить следующий код:
protected void OnItemCreated(object sender, EventArgs args)
{
if (args == null)
{
return;
}
var parameters = Event.ExtractParameters(args);
var item = ((ItemCreatedEventArgs)parameters[0]).Item;
if (item == null)
{
return;
}
var user = Sitecore.Context.User;
var accessRules = item.Security.GetAccessRules();
accessRules.Helper.AddAccessPermission(user,
AccessRight.ItemRead,
PropagationType.Any,
AccessPermission.Allow);
accessRules.Helper.AddAccessPermission(user,
AccessRight.ItemWrite,
PropagationType.Any,
AccessPermission.Allow);
item.Editing.BeginEdit();
item.Security.SetAccessRules(accessRules);
item.Editing.EndEdit();
}
Я только что закончил строительство этой самой функции. Хотя нет ничего вне коробки, существует целый ряд возможных путей решения этой в том числе:
- пункт: сохранение обработчика событий (примечание «экономии» и не «спас», который происходит после того, как тот факт,), или
- создать процессор для трубопровода saveUI, который выполняется при нажатии кнопки «Сохранить» выполняется в пользовательском интерфейсе, или, как мы пошли
- создать процессор для getContentEditorWarnings трубопровода
Этот последний подход позволяет отключить пользовательский интерфейс Sitecore и отображать сообщение пользователю, но не мешает кодам или API изменять элементы, что было идеально для нас. Наш процессор принял список путей (в конфиге) в качестве подэлементов, которые позволили нам ограничить функциональность определенными областями сайта (мы контролировали доступ к панели управления маркетингом).
Вот выдержка из трубопровода <getContentEditorWarnings>
, где мы ввели нашу деталь.
....
<processor type="Sitecore.Pipelines.GetContentEditorWarnings.CanWrite, Sitecore.Kernel"/>
<processor type="PingWorks.Pipelines.GetContentEditorWarnings.EditorIsFromAuthorGroup, PingWorks.Pipelines.GetContentEditorWarnings" patch:source="PingWorks.Pipelines.GetContentEditorWarnings.config">
<ignoredRoles hint="list:AddIgnoredRole">
<role>sitecore\_UserBase</role>
</ignoredRoles>
<paths hint="list:AddPath">
<path>/sitecore/system/Marketing Control Panel/Taxonomies/</path>
<path>/sitecore/system/Marketing Control Panel/Campaigns/</path>
<path>/sitecore/system/Marketing Control Panel/Engagement Plans/</path>
<path>/sitecore/system/Marketing Control Panel/Experience Analytics/</path>
<path>/sitecore/system/Marketing Control Panel/FXM/</path>
<path>/sitecore/system/Marketing Control Panel/Outcomes/</path>
<path>/sitecore/system/Marketing Control Panel/Path Analyzer/</path>
<path>/sitecore/system/Marketing Control Panel/Personalization/</path>
<path>/sitecore/system/Marketing Control Panel/Test Lab/</path>
<path>/sitecore/system/Marketing Control Panel/Experience Explorer/</path>
<path>/sitecore/system/Marketing Control Panel/Analytics Filters/</path>
</paths>
</processor>
<processor type="Sitecore.Pipelines.GetContentEditorWarnings.CanWriteWorkflow, Sitecore.Kernel"/>
...
Обратите внимание, как вы можете использовать Factory Configuration Sitecore для заполнения свойства экземпляра, что исполнитель трубопровода будет создавать с использованием вложенных элементов, и как в этом случае мы добавляем строки в List<string>
имущество путем методы ::AddIgnoredRole()
и ::AddPath()
.
В нашем конкретном случае мы хотели разрешить редактирование только там, где редактор был членом той же группы ролей, что и исходный автор, хотя ваша логика будет еще более прямолинейной, чем наша. В нашем случае мы также добавили переопределение для пользователей-администраторов и добавили пользовательский кеш для хранения результатов поиска ролей, чтобы ускорить обработку, поскольку членство в ролях в нашем случае не меняется очень часто.
Я избавлю вас большую часть обработки, но суть его в методе ::Process()
(я должен был отразить этот код, я не могу получить доступ к источнику в настоящее время):
public void Process(GetContentEditorWarningsArgs args)
{
string displayName;
this._item = args.Item;
if (!this._isValidForProcessing())
return;
User user = null;
List<string> creatorRoles = this._getRolesForUser(this._item.Statistics.CreatedBy, out user);
List<string> editorRoles = this._getRolesForUser(Context.User);
// compare creator's roles with current editor to find a match
if (creatorRoles.Any() && editorRoles.Any() && editorRoles.Any(r => creatorRoles.Contains(r)))
return;
// if we haven't already aborted, add a warning to display and block editing
GetContentEditorWarningsArgs.ContentEditorWarning cew = args.Add();
cew.IsExclusive = true;
cew.Key = "EditorIsFromAuthorGroup";
cew.Title = "Editing restricted";
cew.Text = $"Editing for this item is restricted. Editors must share a role with the original author, in this case <{user?.DisplayName ?? "Unknown Author"}>.";
}
private bool _isValidForProcessing()
{
if (this._item == null)
return false;
if (Context.IsAdministrator)
return false;
if (!this._paths.Any<string>((string p) => this._item.Paths.FullPath.ToLower().StartsWith(p)))
return false;
return true;
}
Это, вероятно, достаточно, чтобы вы могли начать с того, где вам нужно.
Спасибо за ссылку, я посмотрю, похоже, действительно подходящее решение! –
Чтобы просто вещи, можно использовать замок и редактировать особенности Sitecore. Пользователь может заблокировать с помощью функции «Обзор»> «Редактировать в рабочей группе». После редактирования сделайте сохранение и нажмите кнопку регистрации. Если вошедший в систему пользователь хочет увидеть свои заблокированные элементы, тогда пользователь может щелкнуть правой кнопкой мыши по левой части дерева контента и выбрать «Мои заблокированные элементы», чтобы увидеть мой заблокированный предметный желобок. Даже вы можете просмотреть все заблокированные элементы в разделе «Обзор»> «Мои элементы». Обратите внимание, что это не вносит никаких изменений в права доступа. Но запретить другим пользователям, кроме admin, разблокировать элементы.
Спасибо gupta. Тем не менее пользователи по-прежнему будут видеть элементы, в которых нет владельца. –
- 1. Фильтрация источника данных, чтобы пользователь мог видеть только свою информацию.
- 2. Rails 4 - установить переменную сеанса, чтобы пользователь мог видеть страницы только во время этого сеанса
- 3. Как сделать так, чтобы пользователь мог редактировать или просматривать только принадлежащие им элементы. Используя Devise?
- 4. как ограничить пользователей только редактировать свои записи
- 5. добавить задержку, чтобы пользователь мог видеть изменение текстового поля.
- 6. С Sitecore и FakeDB, как вы можете установить LookupField TargetItem?
- 7. Ant: Как вы можете распечатать свои ошибки?
- 8. Безопасность рабочего стола Sitecore
- 9. Авторизация пользователей, чтобы они могли просматривать только свои объекты
- 10. Как вы можете использовать цикл while, чтобы пользователь мог открыть новый текстовый файл? Python
- 11. Ruby on Rails Пользователь может редактировать только предпочтение, не видеть список или создавать новые
- 12. Pundit scoping, как заставить участника видеть только свои сообщения?
- 13. current_user может видеть комментарии только свои посты
- 14. Как вы проверяете свои бизнес-объекты?
- 15. Как обеспечить безопасность Jenkins, чтобы пользователь не мог выполнять команды под учетной записью другого пользователя.
- 16. Как вы можете редактировать содержимое UIWebView?
- 17. Можете ли вы классифицировать свои тд-теги
- 18. Laravel: Администраторы могут видеть/редактировать/удалить все, но авторы могут только свои собственные
- 19. Как вы можете видеть, является ли файл двоичным в cvs
- 20. Как редактировать только свои данные в CakePHP 2?
- 21. Почему вы не можете видеть файлы apk?
- 22. Sitecore - Безопасность рабочего стола
- 23. Как заблокировать конкретную ячейку в рабочей книге XSSF, чтобы пользователь не мог редактировать это
- 24. Пользователь только видеть приз раз - cookie JS?
- 25. Измените мой андроид, чтобы пользователь мог использовать только одно или два приложения?
- 26. Как вы можете применить обработчик события jQuery, чтобы действовать только на div, в котором находится пользователь?
- 27. Можете ли вы установить свои приложения на свои окна 7 телефон
- 28. Как вы можете защитить/зашифровать свои классы Java?
- 29. Как найти OldPassword, чтобы пользователь мог его изменить
- 30. Блокировка таблицы, чтобы только один пользователь мог обновить ее
Возможно, вы имеете в виду права на просмотр с видом? вам нужно увидеть родителя, прежде чем вы сможете создать или отредактировать элемент.о полях, которые вы можете отменить поле, читаемое полем –
Пример: в редакторе содержимого есть 10 пользователей, которые могут создавать элементы из родительского элемента. Они могут редактировать и видеть свой собственный созданный дочерний элемент, но элементы, созданные другими пользователями, «скрыты». –