簡體   English   中英

每個用戶的果園內容

[英]Orchard Content Per user

我正在制作一個網絡項目,管理員將能夠為特定的新用戶創建一個內容項目。 所以我希望用戶只能看到管理員指定的內容。

所以每當用戶登錄時,只會看到管理員指定的內容(菜單、布局..)。

我試圖實現這一目標的方式是:

- 管理員將內容項的所有者設置為目標用戶。
-使用IAuthorizationServiceEventHandler我使用當前用戶IAuthorizationServiceEventHandler指定內容

無論如何可以通過 userId 獲取內容? 或者還有其他好的方法嗎?

如果您想獲得特定所有者的所有內容項,您可以執行以下操作:

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

檢查所有者的特定內容項:

var ownerId = contentItem.As<CommonPart>.Owner.Id;

可以通過注入 IOrchardServices 訪問當前用戶

var currentUserId = _orchardServices.WorkContext.CurrentUser.Id;

編輯:

我不完全確定您要做什么,但是如果您希望單個 url 根據用戶返回不同的內容項,我建議創建一個具有檢索用戶內容項並顯示該操作方法的新控制器. 您可以參考 Orchard.Core.Contents.Controllers.ItemController.cs 類以獲取如何從控制器呈現內容項的示例。

如果您有許多內容項需要為每個用戶呈現不同的版本,則它會稍微復雜一些。 一個簡單的解決方案可能是創建一個內容類型並附加一個名為 UserContent 的內容選擇器字段。 此內容類型將充當為用戶呈現特定項目的母版。 管理員將創建子項,將所有者設置為指定用戶並將子項添加到主內容選擇器字段 (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>
}

用記事本編寫的代碼可能無法編譯...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM