2012-01-21 17 views
3

我正在尋找一種方法來輕鬆地包圍安全性的位置,同時使用它來顯示/隱藏鏈接上我的菜單。ASP.NET身份驗證,以允許/阻止頁面訪問和顯示/隱藏鏈接

我知道如何阻止未授權用戶的位置,如:

<location path="AdminDirectory"> 
    <system.web> 
     <authorization> 
      <allow roles="SomeRole"/> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 

而且我可以顯示的代碼/隱藏鏈接,比如:

myLink.Visible = User.IsInRole("SomeRole"); 

但是我正在尋找是這樣做的,以便「SomeRole」角色名稱只需配置一次。如果我可以從location元素中讀取並在代碼中進行測試,那將是理想的,但我沒有辦法做到這一點。

// Something like: 
myLink.Visible = TestLocationAccess("AdminDirectory"); 

我能想到的有一個JavaScript/AJAX調用「測試」從客戶端和顯示的目錄做這個的非常糟糕的方式/隱藏與JavaScript的聯繫,但顯然這不是理想的。

感謝

回答

4

你可以使用CheckUrlAccessForPrincipal方法:

myLink.Visible = UrlAuthorizationModule 
    .CheckUrlAccessForPrincipal("~/AdminDirectory", User, "GET"); 

由於該方法是靜態的,你顯然需要傳遞的第二個參數當前IPrincipal的一個實例。

+0

這正是我所期待的。謝謝。 –

2

考慮使用​​它的功能內置於顯示或隱藏基於角色

鏈接即源XML的網站地圖,可以定義角色的鏈接適用於內即

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > 
    <siteMapNode url="default.aspx" title="Home"> 
     <siteMapNode url="admin.aspx" title="Admin" roles="Admin" /> 
     <siteMapNode url="user.aspx" title="User Page" roles="User" /> 
    </siteMapNode> 
</siteMap> 

你可以使用角色來限制在web.config訪問和使用相同的角色限制在站點地圖導航。

我想你仍然在兩個地方控制授權。這是我會做的(過去已經完成)。不知道這是否讓你到你需要去的地方。

反正這裏的Scott Guthrie解釋比我更可以

相關問題