2009-10-01 55 views
0

我有我的控制器以下過濾器:凡授權訪問控制器的

[Authorize(Roles="Admin")] 
public class AdminOnlyController : Controller 
{ 
    // stuff 
} 

我展示了一個幾個人在這裏工作我在做什麼的,和一個巨大的辯論中出現了一些的聲稱授權不應該是財務主任的責任。根據Steven Sanderson撰寫的Pro ASP.NET MVC框架書,我學會了這樣做。

沒有其他人能夠建議如何應該完成,除了它是錯的。

是嗎?有沒有更好的辦法?

回答

1

簡單的答案是肯定的 - 那是最好的方法。控制者的行爲是對應用程序的所有請求的終點。將授權放在那裏是非常有意義的。

您可以將授權授予IIS,但在訪問被控制爲文件(.aspx等)時效果更好。現在我們有了一個MVC,你必須控制一個控制器內多個動作的訪問。

1

有兩種分配授權的方式。控制器類或ActionResult。相對於你如何做到這一點,我不太確定。

我沒有真正看到論證的一方,你認爲與管理誰有權調用它的控制器有關。通過在附近獲得授權,您可以按照理論(我忘記了名稱)'儘可能接近地將它聲明到您使用它的位置。'

這可能取決於您的同事的背景。如果他們真的習慣使用類似XML的東西,那麼我敢打賭他們提出了一些類型的配置文件 - 這似乎是由於更多的公司類型的編程而引發的。

另一方面,在其他地方(但在應用程序內)提取授權可能會有好處,因此可以輕鬆修改,以防止最終添加「PaidUser」。在這種情況下,你不必去每個控制器去更新它。不過,我認爲你最終會陷入一種全部或全無的方式 - 無論是在控制器中,還是全部都在某個配置文件中。除非您創建了一個計劃,即您的中央授權可以被管理員授權覆蓋,但當時除外,您可能很容易失去對誰進行管理的控制權,並最終進入「授權管理」類別。