每一個動作我有以下幾點:有沒有一種方法我可以設置[授權(角色=「管理員」)在一個MVC控制器
[Authorize(Roles = "admin")]
我設置爲我控制器上的每一個動作。然而,有什麼辦法可以爲控制器在全球範圍內做到這一點?
每一個動作我有以下幾點:有沒有一種方法我可以設置[授權(角色=「管理員」)在一個MVC控制器
[Authorize(Roles = "admin")]
我設置爲我控制器上的每一個動作。然而,有什麼辦法可以爲控制器在全球範圍內做到這一點?
[Authorize(Roles = "admin")]
public class AdminController : Controller
{
}
該屬性也適用於控制器。
你甚至可以創建一個基本的控制器,並設置屬性就可以了(並因此獲得相同的授權上的所有衍生控制器)
[Authorize(Roles = "user")]
public class BaseController : Controller
{
}
public class NewsController : BaseController
{
}
public class ForumController : BaseController
{
[HttpPost, Authorize(Roles="admin")]
public ActionResult Delete(int id)
{
}
}
更新
第一個問題:你可以把[HandleError]
在您的基礎控制器中獲取MVC在所有控制器中的錯誤處理。我剛剛寫了一個描述它的blog entry。
第二個問題:是的。將最具體的[Authorize]
屬性放在操作上。 (例如授權基本控制器中的「用戶」和編輯操作中的「管理員」)。
如果使用該屬性標記控制器,則控制器中的所有操作方法都會受到限制。
是的,您所要做的就是將該屬性放在您聲明的類的頂部。
[Authorize(Roles = "admin")]
public class TheController : Controller
當你這樣做的時候,那麼這個控制器上的每個動作都將被檢查爲admin角色。
我個人更喜歡有這種東西的基礎控制器。 +1 – BigMike
您在基本控制器中還放置了哪些其他的東西?想知道我是否錯過了讓事情變得更簡單的機會。 –
另一個相關的問題。假設我在控制器級別執行此操作。那麼如果我想允許兩個角色(例如「用戶」和「管理員」)訪問同一個動作,那怎麼辦?我可以在行動級別覆蓋,我會怎麼做? –