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