2010-07-13 65 views
2

目前,我有我的訪問權限web.config對比的PrincipalPermission的web.config中的頁面訪問控制

<location path="Account"> 
    <system.web> 
     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 
</location> 
... 

我不喜歡這樣的原因有兩個:

  1. web.config變得一團糟作爲我的網站建立了
  2. 我不確定保持網頁訪問規則如何與頁面本身分開是很好的安全性。畢竟,我大部分時間都在編輯aspx/c#文件,而不是web.config,所以事情往往會滑落。
  3. 這是一個非常奇怪的...我剛剛添加了ASP.NET4路由,它改變了URL。所以,突然間我的web.config權限不再有效!類似於上面的第2點。

我在想每個aspx所涉及的類/ c#文件的安全屬性只需使用PrincipalPermission會更好。我的問題:

  • 這是由任何人完成,或者這是一個壞主意?
  • 更重要的是...我的PrincipalPermission屬性會生成一個異常(好),但不會將用戶重定向回登錄頁面(錯誤)。這可以解決嗎?

回答

0

我知道一個可能有用的技巧 - 如果你把你的頁面放在單獨的文件夾中,你可以在每個文件夾中有一個本地web.config。不需要包含全局網絡配置。 請參閱'配置設置的範圍'部分here中的'ASP.NET應用程序子目錄'行的表格。

0

主體權限似乎是一個好主意。但是,一直沿着這條路線走下去,取捨遠遠超過了使用「正常」安全方法所能獲得的大量配置。恕我直言,最大的缺點是他們爲可能出現例外的任何人提供了一個可能的例外情況,需要解決。所有的安全性都會變得相當硬編碼,因爲它們是編譯時屬性,所以您無法輕鬆地將它們與運行時配置設置相匹配。那些對每個規則都有例外情況的真實世界情景會發生什麼?

無論如何,如果你必須這樣做,你最好的朋友將成爲一個自定義的IPrincipal實現來解決許多PrincipalPermissionAttribute施加的約束。

0

我剛在另一個問題here上發佈了答案。

我不想使用web.config進行授權,所以我想出了一個MVC實現,使用一個屬性和一個自定義主體。