Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置安全性,以便用户只能在Sitecore中查看/编辑其项目?_C#_Security_Sitecore_Sitecore8_Usermanager - Fatal编程技术网

C# 如何设置安全性,以便用户只能在Sitecore中查看/编辑其项目?

C# 如何设置安全性,以便用户只能在Sitecore中查看/编辑其项目?,c#,security,sitecore,sitecore8,usermanager,C#,Security,Sitecore,Sitecore8,Usermanager,在Sitecore中是否有任何方法可以创建一个只能查看和编辑自己创建的项目的角色/用户?如果没有,我怎样才能做到这一点呢?我刚刚完成了这个函数的构建。虽然没有现成的解决方案,但有许多可能的方法可以解决这一问题,包括: 项:保存事件处理程序(注意“保存”而不是“保存”,发生在事件发生后),或 为saveUI管道创建一个处理器,该管道在UI中执行“Save”按钮时执行,或者按照我们的方式执行 为getContentEditorWarnings管道创建处理器 最后一种方法允许您禁用Sitecore

在Sitecore中是否有任何方法可以创建一个只能查看和编辑自己创建的项目的角色/用户?如果没有,我怎样才能做到这一点呢?

我刚刚完成了这个函数的构建。虽然没有现成的解决方案,但有许多可能的方法可以解决这一问题,包括:

  • 项:保存事件处理程序(注意“保存”而不是“保存”,发生在事件发生后),或
  • 为saveUI管道创建一个处理器,该管道在UI中执行“Save”按钮时执行,或者按照我们的方式执行
  • 为getContentEditorWarnings管道创建处理器
最后一种方法允许您禁用Sitecore UI并向用户显示消息,但不阻止代码或API更改项目,这对我们来说非常理想。我们的处理器接受了路径列表(在配置中)作为子元素,允许我们将功能限制在站点的某些区域(我们控制对营销控制面板的访问)

这里是我们注入片段的
管道的摘录

....
<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"/>
...

这可能足以让您在需要的地方有一个良好的开端。

为了解决这个问题,我在sitecore/events配置下添加了一个项目:created event

<event name="item:created" xdt:Transform="Replace" xdt:Locator="Match(name)">
              <handler type="Sirano.Dev.ItemEventHandlers.CustomItemEventHandler, Sirano.Dev" method="OnItemCreated" />
</event>

简单来说,可以使用Sitecore的锁定和编辑功能。用户可以在工作流组中通过查看>编辑锁定。编辑完成后,保存并单击签入。如果登录用户希望查看其锁定的项目,则用户可以右键单击内容树的左侧并选择我的锁定项目以查看我的锁定项目。甚至您也可以从“查看”>“我的项目”查看所有锁定的项目。注意:这不会对访问权限进行任何更改。但不允许管理员以外的其他用户解锁项目

你的意思是带视图的阅读权限吗?在创建或编辑项之前,需要先查看父项。关于可以拒绝字段读取的字段示例:在内容编辑器中,有10个用户可以从父项创建项。他们可以编辑和查看自己创建的childitem,但其他用户创建的项目是“隐藏”的。感谢您的参考,我将查找此项,这似乎是一个有效的解决方案!谢谢古普塔。用户仍然可以看到没有所有者的项目。
<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();
    }