2011-11-08 90 views

回答

5
[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]屬性放在操作上。 (例如授權基本控制器中的「用戶」和編輯操作中的「管理員」)。

+0

我個人更喜歡有這種東西的基礎控制器。 +1 – BigMike

+0

您在基本控制器中還放置了哪些其他的東西?想知道我是否錯過了讓事情變得更簡單的機會。 –

+0

另一個相關的問題。假設我在控制器級別執行此操作。那麼如果我想允許兩個角色(例如「用戶」和「管理員」)訪問同一個動作,那怎麼辦?我可以在行動級別覆蓋,我會怎麼做? –

1

如果使用該屬性標記控制器,則控制器中的所有操作方法都會受到限制。

1

是的,您所要做的就是將該屬性放在您聲明的類的頂部。

[Authorize(Roles = "admin")] 
public class TheController : Controller 

當你這樣做的時候,那麼這個控制器上的每個動作都將被檢查爲admin角色。

相關問題