Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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# 每个用户的果园内容_C#_Orchardcms - Fatal编程技术网

C# 每个用户的果园内容

C# 每个用户的果园内容,c#,orchardcms,C#,Orchardcms,我正在制作一个web项目,管理员将能够为特定的新用户创建一个内容项。因此,我希望用户只看到管理员指定的内容 因此,每当用户登录时,将只看到管理员指定的内容(菜单、布局…) 我试图实现这一点的方法是: -管理员将内容项的所有者设置为目标用户。 -使用iauthorizationserviceventhandler我使用当前用户ID指定内容 是否仍然可以通过用户ID获取内容?或者还有其他好办法吗?如果您想获得具有特定所有者的所有内容项,可以执行以下操作: var userId = ...; // _

我正在制作一个web项目,管理员将能够为特定的新用户创建一个内容项。因此,我希望用户只看到管理员指定的内容

因此,每当用户登录时,将只看到管理员指定的内容(菜单、布局…)

我试图实现这一点的方法是:

-管理员将内容项的所有者设置为目标用户。
-使用
iauthorizationserviceventhandler
我使用当前用户ID指定内容


是否仍然可以通过用户ID获取内容?或者还有其他好办法吗?

如果您想获得具有特定所有者的所有内容项,可以执行以下操作:

var userId = ...; //
_contentManager.Query(VersionOptions.Published)
  .Where<CommonPartRecord>(cr => cr.OwnerId == userId)
  .List();
编辑:

我不太清楚您想做什么,但是如果您希望一个url根据用户返回不同的内容项,我建议创建一个新的控制器,使用一个操作方法来检索用户的内容项并显示它。有关如何从控制器呈现内容项的示例,可以参考Orchard.Core.Contents.Controllers.ItemController.cs类

如果有许多内容项需要为每个用户呈现不同的版本,则会稍微复杂一些。一个简单的解决方案是创建一个内容类型并附加一个名为UserContent的内容选择器字段。此内容类型将充当为用户呈现特定项目的主控形状。管理员将创建子项,将所有者设置为指定用户,并将子项添加到masters内容选择器字段(UserContent)。然后,我们可以为UserContent编写一个替代显示形状(我知道有点老套,更好的方法是为ContentPickerField创建一个新的驱动程序,但要做的工作稍微多一些)。因此,将一个名为
Fields.ContentPicker UserContent
的文件放入模块的视图文件夹中,您可以在其中包含以下内容:

@{
  var userId = WorkContext.CurrentUser.Id;
  var field = (ContentPickerField)Model.ContentField;
  var contentItem = field.ContentItems.FirstOrDefault(item => item.As<CommonPart>().Owner.Id == userId);
}

@if(contentItem != null) {
  <div>
    @Display(contentItem.ContentManager.BuildDisplay(contentItem, "Detail"))
  </div>
}
@{
var userId=WorkContext.CurrentUser.Id;
变量字段=(ContentPickerField)Model.ContentField;
var contentItem=field.ContentItems.FirstOrDefault(item=>item.As().Owner.Id==userId);
}
@if(contentItem!=null){
@显示(contentItem.ContentManager.BuildDisplay(contentItem,“详细信息”))
}

用记事本编写的代码可能无法编译…

谢谢!但我如何才能呈现用户内容项呢?谢谢你的回复,我需要更具体的是创建一个包含一些内容的布局,并将其分配给特定用户。然后你需要创建一个自定义布局元素。orchard sou中有许多示例rce代码。看看orchard.Layouts模块
var currentUserId = _orchardServices.WorkContext.CurrentUser.Id;
@{
  var userId = WorkContext.CurrentUser.Id;
  var field = (ContentPickerField)Model.ContentField;
  var contentItem = field.ContentItems.FirstOrDefault(item => item.As<CommonPart>().Owner.Id == userId);
}

@if(contentItem != null) {
  <div>
    @Display(contentItem.ContentManager.BuildDisplay(contentItem, "Detail"))
  </div>
}