2009-10-29 142 views
4

我是ASP.NET MVC的新手,需要提供有關如何實現以下內容的建議。實現ASP.NET MVC的自定義登錄

該網站是一個大量使用的網站,內部大約有200個用戶(intranet)。我們使用表單身份驗證打擊SQL Server數據庫(不是Windows集成)。

一些操作受到保護,一些可以被任何人查看,一些可以被兩者查看 - 所以如果這些用戶是登錄用戶,他們會從數據庫中看到他們的東西,否則他們會看到一個臨時配置文件 - 很像StackOverflow。

我該如何去實現這種情況下的安全模型?我可以重用ASP.NET MVC中的現有框架並使用授權過濾器嗎?

有沒有我可以用作參考的在線文章?

+0

你爲什麼不使用Windows集成? – RichardOD 2009-10-29 14:21:55

回答

0

page's User object擁有一個IsAutheticated(User.Identity.IsAuthenticated)屬性,它會告訴您用戶是否已通過身份驗證。這與顯示或隱藏數據/控件(或ASP .Net LoginView control)的條件語句相結合,可以讓你做你想做的事。另外,您可以使用ASP .Net's role provider(或者自行定製提供商)來進一步定義您的用戶可以根據您分配給他們的角色訪問/執行的操作。

4

我有同樣的問題,因爲我想用自定義的用戶數據庫實現asp.net成員資格,我的解決方案是覆蓋默認的aspnet成員資格提供程序來管理用戶日誌和aspnet角色提供程序來管理用戶角色。 例如,我的定義成員資格提供看起來某事像這樣

namespace Entities 
{ 
    public class VEMembership : MembershipProvider 
    { 
     public override bool ValidateUser(string username, string password) 
     { 
      // your logic to validate user 
      // return false if not qualified, other wise true 
     } 
    } 
} 

,然後在網絡配置文件,你只需要您的默認成員資格提供程序添加到:

<membership defaultProvider="VEMembership"> 
    <providers> 
     <clear/> 
     <add name="VEMembership" 
      type="Entities.VEMembership" 
      enablePasswordReset="true" 
      requiresQuestionAndAnswer="false" 
      requiresUniqueEmail="false" 
      passwordFormat="Hashed" 
      maxInvalidPasswordAttempts="5" 
      minRequiredPasswordLength="6" 
      minRequiredNonalphanumericCharacters="0" 
      passwordAttemptWindow="10" 
      passwordStrengthRegularExpression="" 
      connectionString="VEConnectionString"/> 
    </providers> 
</membership> 

有很多文章關於谷歌搜索定製aspnet會員提供商,如果你需要任何幫助做到這一點。 希望這有助於

+0

這就是一個很好的例子!正是我所追求的!如何在ValidateUser中獲得與底層數據庫的連接?問題是我必須在會話對象中維護一些數據(它們的配置文件位於List中)。我可以訪問一個會話並將它們放在那裏,當授權在一個重寫功能中結束時嗎? – 2009-11-02 03:46:54

+0

其實,我是否可以從SqlMemberShipProvider派生出來,而只是實現ValidateUser呢? – 2009-11-02 03:48:51

+0

對於您不想覆蓋任何內容的任何函數,只需使用基本函數即可,例如: public override bool UnlockUser(string username) { return base.UnlockUser(username); } – tuanvt 2009-11-02 10:31:13