2013-04-30 160 views
4

我想對DNN角色的API調用應用授權。以便DNN本身將執行檢查登錄的用戶是否有權訪問特定的API調用。我有一個解決方案,但不完全是我想要的。 =>How to handle security/authentication on a DNN-based web API。此鏈接建議具有單獨的API授權模塊,以便我們可以將角色分配給此模塊,並且通過在API調用上使用[SupportedModules(「ModuleName」)]屬性,我們可以限制授權。我檢查了這個例子,但沒有運氣...... PLZ建議我以正確的方式來做到這一點。DNN API基於角色的授權

回答

3

只要您將DnnApiController作爲7.x的一部分使用,您可以簡單地將此屬性添加到任何方法以要求基於角色的授權。

[DnnAuthorize(StaticRoles = "MyRoleNameHere")] 

其中「MyRoleNameHere」是用戶必須具有的角色的名稱。

+0

一定的差異我很欣賞你的答案,但這種解決方案我可能無法動態地改變角色。防爆。如果我想更改角色或添加新角色來訪問API,那麼我需要通過更新StaticRoles值來更改代碼。 – sachin 2013-05-06 06:25:17

+0

@Mitchel賣家,允許訪問多個角色,只需用逗號分隔? – Lucas 2014-03-07 05:42:28

+0

嘿,對不起,但我怎麼能把多個角色名稱? – Gaspa79 2017-12-29 15:21:28

2

您是否檢查了此帖? http://www.dotnetnuke.com/Resources/Blogs/EntryId/3329/Authorization-in-the-new-DNN-Services-Framework.aspx

我發現這很有用(以及您提到的其他答案)......但是我花了很長時間才明白它!以下是我迄今爲止所瞭解的內容: 如果您使用的是網絡瀏覽器,DNN可以接受您的請求並評估權限(根據您的登錄信息)。鏈接的博客條目使用列出選項卡的API來演示 - 它只顯示您的登錄有權查看的選項卡。如果您從其他位置(例如在PHP腳本中)編寫HTTP請求,則在發送請求發送用戶名/密碼時可以看到相同的行爲。

您可以使用DnnAuthorize屬性,但直接使用角色名稱可能會有問題,因爲您提到的原因 - 如果它們更改會怎麼樣?但是,您可以編寫自己的屬性。基本上,它需要(以某種方式,形狀或形式)TabID和ModuleID。這樣,您可以不用檢查角色名稱,而是讓DNN檢查當前用戶對該模塊的權限。

您可以爲它編寫一個模塊,爲模塊分配基於角色的權限,並讓DNN只檢查給定登錄名的選項卡/模塊。編寫自己的屬性將使您可以輕鬆地在控制器中分配權限,而無需直接指定角色。

我相信鏈接指向DNN 6.2,所以有可能是7

+0

要在一定程度上解決我的問題,我做了以下操作。 1.我創建了一個模塊,僅用於設置訪問API的角色 2.然後,我在webconfig文件的appSetting中添加了相同的模塊ID,以知道該模塊必須用於授權。 3.然後我寫了我自己的Authorize屬性,我在其中對已記錄的用戶角色與已分配給模塊的角色進行比較。 – sachin 2013-05-10 12:36:38

+0

感謝所有人的幫助......!你的建議是什麼我的答案。 – sachin 2013-05-10 12:48:40