2012-03-04 87 views
0

我正在構建一個Asp.net MVC3應用程序(使用Razor),並且我有一個包含用戶和角色信息的數據庫。如何使用其他數據庫和會話進行授權?

這是我的數據庫的簡化方案。

用戶(IDUser,登錄,密碼);
角色(IDRole,Name);
UserInRole(IDUser,IDRole); //多對多

是這樣的:

db schema screnshot

我讀到關於使用AuthorizeAttribute,來控制loged用戶的網頁,並與特定角色和我的研究有關使用我的數據庫來控制用戶和角色。所以我的問題是:

  1. 是否可以使用我的數據庫來管理用戶和角色,並在我的操作中使用[授權]? [如果是,我該怎麼做?]
  2. 是否可以使用session來代替cookie來管理登錄並使用Authorization native Asp.net MVC3? [如果是的話,我該怎麼做?如果沒有如何使用會話,否則?]

如果可能請張貼代碼示例。

回答

0

謝謝佩德羅。根據你的文章,我建立這個使用SESSION:

public class CustomAutorizeAttribute : AuthorizeAttribute 
{ 
    public List<string> Roles { get; set; } 

    public CustomAutorizeAttribute() 
    { 
    } 

    public CustomAutorizeAttribute(params string[] Roles) 
    { 
     this.Roles = new List<string>(); 
     this.Roles.AddRange(Roles); 
    } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     User user = (User)httpContext.Session["user"]; 

     if (user != null) 
     { 
      if (Roles != null) 
      { 
       foreach (var role in user.Roles) 
       { 
        if (Roles.Exists(e => e == role)) return true; 
       } 
       return false; // User don't have any hole 
      } 
      else 
      { 
       return true; // The Attribute is used without roles. 
      } 
     } 
     else return false; // Not logged. 
    } 
} 

張貼在這裏希望別人。

1

不知道我是否理解正確,但您想使用[Authorize]屬性來處理您的自定義用戶數據庫?

如果是這樣的話,也有出頭檢查:

要簡單地允許/拒絕基於用戶是否被授權與否,股票[Authorize]屬性會工作得很好。自定義邏輯進入登錄操作,您將在其中使用給定的憑據檢查數據庫並相應地發出cookie。喜歡的東西:

public ActionResult Login(string username, string password) 
    { 
     bool isValid = //check the database with the given username and password 

     if(isValid) 
     { 
      FormsAuthentication.SetAuthCookie(username, false); 

      return RedirectToAction("..."); 
     }else 
     { 
      return View(); 
     } 
    } 

如果您想根據角色來也控制訪問,我要說有2種直接的方式:

  • 實現自定義成員資格和角色提供者,這是我不像,因爲我覺得他們很沒用,最後總是在我respositories重做邏輯

  • 實現自定義AuthorizeAttribute,像

    public class CustomAuthorizeAttribute : AuthorizeAttribute 
    { 
        protected override bool AuthorizeCore(HttpContextBase httpContext) 
        { 
         //Check based on these 2 properties: 
         // this.Roles 
         // this.Users 
         //against httpContext.User 
    
         //return true or false to indicate access or deny 
        } 
    } 
    
+0

非常感謝您的光臨。但我還有一個問題FormsAuthentication與Session或Cookie一起使用? – 2012-03-10 23:27:54

相關問題