2011-11-15 28 views
0

我只是想確保他們在運行任何代碼之前登錄。ASP.NET MVC3:如何在運行控制器代碼之前確保登錄?

我發現User.Identity.IsAuthenticated哪些可以用於布爾檢查登錄。但是如果我重定向了,它仍然會運行代碼,再加上我必須把它放在任何地方?

在ROR有我們做了的before_filter選項,在每個控制器的頂部檢查,難道不以其他方式運行。

請能有人指導我如何做到這一點。

+0

你有沒有考慮使用'<授權>在web.config'元素? – CodingGorilla

+0

你是直接ASP.NET還是使用MVC3?從ROR來看,MVC3可能是一個不錯的選擇。 – Shawn

+0

@Shawn:OP在問題中提到了「控制器」,所以我假定了MVC。 – LukeH

回答

4

您可以使用AuthorizeAttribute此:

當您標記的操作方法與AuthorizeAttribute,訪問該 操作方法僅限於誰的身份驗證和 授權的用戶。如果使用該屬性標記控制器,則控制器中的所有操作方法都會受到限制。

的授權屬性,您可以指明授權 受限於預定義角色或個別用戶。這使您能夠高度控制 誰有權查看該網站上的任何頁面。

如果未經授權的用戶嘗試訪問標記爲 Authorize屬性的方法,MVC框架將返回401 HTTP狀態 代碼。如果網站被配置爲使用ASP.NET表單身份驗證,則 401狀態代碼會導致瀏覽器將用戶重定向到 登錄頁面。

例如:

[Authorize] 
public ActionResult DoSomething() 
{ 
    // ... 
} 
+0

優秀的答案大家。這正是我所希望的。 – Doomsknight

+2

你的例子只保護一種方法,而不是每個控制器中的所有方法。查看我的博客http://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx以獲得安全的方法 – RickAndMSFT

2

在你的控制器類的頂部,這樣寫: -

[Authorize] 
public class StoreManagerController : Controller 
+0

您的示例只保護一個控制器,而不是每個控制器中的所有方法。見我的博客http://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx一個安全的方法 – RickAndMSFT

+0

@ RickAnderson-MSFT,感謝隊友的價值鏈接.... :-) –

2

使用授權屬性。

[Authorize] 
public ActionResult About() 
{ 
    return View(); 
} 
+0

你的例子只保護一種方法,而不是每個控制器中的所有方法。見我的博客http://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx一個安全的方法 – RickAndMSFT

相關問題