2011-08-12 35 views

回答

0

根據我的理解,當使用角色提供者時,將使用[Authorize(Role =「」)]屬性。你可以推出自己的相當簡單 - 見this鏈接的指導。

通常,我所做的是擁有用戶表,角色表和UserInRole表。角色表只有一個角色ID,例如「Admin」和描述。 UserInRole表是將用戶標識鏈接到角色標識的連接表。

這樣一個用戶可以屬於多個角色,而不是隻綁定到一個。

請注意這是我這樣做的方式 - 並不一定是正確的方式。如果你想在用戶表中使用你的「type」字段,那麼它仍然可以工作 - 你的自定義角色提供者只會被實現與我的不同。

編輯:此外 - [授權]屬性將只與一個成員資格提供程序,並且不需要有角色提供程序。我認爲語法是[Authorize(User =「User1,User2」)]或類似的東西。

編輯:把用戶帶到一個錯誤頁面,指示他是不是在正確的角色,你可以添加一些自定義的邏輯,以你的登錄方法在你的AccountController:

[HttpPost] 
     public ActionResult LogOn(LogOnModel model, string returnUrl) 
     { 
      if (ModelState.IsValid) 
      { 

       if (Membership.ValidateUser(model.UserName, model.Password)) 
       { 
        if (!User.IsInRole("MyRole")) 
        { 
         return Redirect("Error"); 

        } 
        else 
        { 
         FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
         if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
          && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
         { 
          return Redirect(returnUrl); 
         } 
         else 
         { 
          return RedirectToAction("Index", "Home"); 
         } 

        } 

       } 
       else 
       { 
        ModelState.AddModelError("", "The email or password provided is incorrect."); 
       } 
      } 

      // If we got this far, something failed, redisplay form 
      return View(model); 
     } 
+0

THX你的建議,我解決了角色問題。但是我在授權後遇到了一個關於登錄的新問題。如果用戶登錄後不在角色中,我想顯示一個錯誤頁面。我應該做一個自定義的AuthorizeAttribute? – vulgur

+0

查看我的編輯...我認爲這將做你想做的。 – Jack

+0

啊,登錄方法....爲什麼我沒有想過之前!福我 – vulgur

相關問題