2015-06-29 19 views
0

我正在創建一個API以根據DnnApiController從外部訪問來自DNN的內容。 其中一個端點應該返回用戶有權訪問的所有頁面。頁面的列表中填充了DotNetNuke.Entities.Tabs.TabController.GetPortalTabs(PortalSettings.PortalId, -1, true, string.Empty, true, false, true, true, false)當初始請求來自瀏覽器或獨立程序時,DNN TabController.GetPortalTabs會返回不同的結果

當請求源自瀏覽器或郵遞員客戶端,但當調用者是獨立應用程序(在本例中爲測試WPF應用程序)時,此結果是錯誤的。

當從瀏覽器/郵遞員調用時,返回10個選項卡,但在WPF中調用時僅返回5個選項卡。

任何想法是怎麼回事?

回答

1

圍繞這到底得了通過實例化一個新的TabController,讓所有的選項卡中,然後門戶作爲過濾如下

var controller = new DotNetNuke.Entities.Tabs.TabController(); 
var tabs = controller.GetTabsByPortal(PortalSettings.PortalId) 
    .Where(t => DotNetNuke.Security.Permissions.TabPermissionController.CanViewPage(t.Value)) 
    .Select(t => t.Value); 

雖然這是低效率的,因爲所有的網頁都被過濾之前,現在返回確實有效,並且API不會過度使用,所以這不是世界末日。

1

我的猜測是,在GetPortalTabs函數重載中,它正在根據當前用戶進行一些處理:UserController.Instance.GetCurrentUserInfo()。此方法正在查看HttpContext以獲取當前用戶。它使用當前用戶篩選出用戶沒有權限的選項卡。如果從外部服務調用,HttpContext.Current將爲空。因此,選項卡可能僅被所有用戶權限可用的選項卡過濾。

+0

我做了一些更多的挖掘,這確實是發生了什麼,但奇怪的是控制器上的UserInfo屬性被正確填充,所以我不確定它爲什麼不能在方法調用中獲得相同的信息 –

相關問題