2013-03-10 18 views
0

我有3個角色:Registered Users, Approved Users, and Admins.
訪問該網站僅提供給Approved usersAdmins.限制訪問網站的具體作用

要限制匿名訪問,我在FilterConfig加入了篩選如下:

filters.Add(new System.Web.Mvc.AuthorizeAttribute()); 

現在,對於註冊用戶,我希望他們重定向到一個登陸頁面說法:

請聯繫其中一位管理員以批准您。

我不確定什麼是正確的方法來做到這一點。
我可以在每個控制器上設置授權屬性,但我不確定這是否是一種好方法。
此外,我不知道我應該在哪裏指定基於角色的默認重定向操作。
我知道我可以在RouteConfig.cs中指定默認重定向操作,但不確定在哪裏指定角色。

+0

我並不完全清楚你想要什麼。你想允許訪問認證用戶的頁面,但重定向其他用戶登錄?您是否想要授權用戶訪問一個頁面,但不希望授權用戶缺少適當的角色? – 2013-03-10 21:14:26

+0

@DaveA,如果用戶是匿名只顯示登錄,如果用戶註冊顯示登陸頁面,對於所有其他角色顯示完整網站 – user194076 2013-03-10 21:17:38

+0

好吧,我有一半明白。如果用戶通過身份驗證允許訪問,否則重定向到登錄。但其餘的,有點混亂。其他角色?除了什麼? – 2013-03-10 21:18:46

回答

1

發臭是正確的,有[Authorize]屬性將重定向所有用戶的邏輯誰沒有登錄到登錄頁面。這是你的dillema的一半。

從那裏你需要改變你的logon方法來檢查新登錄的用戶是否有正確的角色(例如ConfirmedUser)。這很棘手,因爲User.IsInRole("ConfirmedUser")在您的logon方法中將始終是錯誤的。這是因爲User對象由http對象填充,直到下一個重新循環纔會被重新填充。幸運的是,您可以使用Roles.IsUserInRole(userName, "ConfirmedUser")來檢查用戶是否有正確的角色。

因此,在您的登錄方法中,在對用戶進行身份驗證之後,將用戶註銷並將其重定向到[AllowAnonymous]方法,以通知他們他們尚未確認。

if (Roles.IsUserInRole(userName, "ConfirmedUser") 
{ 
       FormsAuthentication.SignOut(); 
       return RedirectToAction("WarningMsg", "Home"); 

} 
+0

對不起,我花了一段時間來嘗試一下,但它效果很好。非常感謝您的幫助!!! – user194076 2013-03-17 22:50:25

+0

很高興我能幫到你。有趣的是,看着我的代碼我犯了一個錯誤。 if語句應檢查用戶沒有角色 - (!Roles.IsUserInRole(userName,「ConfirmedUser」))。但我想你自己得出了正確的結論:) – 2013-03-18 00:34:36

0

您應該可以使用[Authorize]屬性。

受限制的頁面將使用[Authorize(Roles="Approved User,Admin")]對其控制器或動作進行修飾,註冊用戶的「着陸頁」爲[Authorize(Roles="Registered User,Approved User,Admin")],登錄動作爲[AllowAnonymous]

如果用戶未被授權,他們將被重定向到Account/Login。您需要在此操作中構建一些邏輯,以重定向已登錄到登錄頁面的「註冊用戶」。其他人應該只看到標準的登錄頁面。

編輯

重定向「註冊用戶」從登錄頁面登陸頁面會是這個樣子

[AllowAnonymous] 
public ActionResult Login(string returnUrl) 
{ 

    if (User.Identity.IsAuthenticated && Roles.IsUserInRole("Registered User")) 
     return RedirectToAction("LandingPage"); 

    ViewBag.ReturnUrl = returnUrl; 
    return View(); 
} 
+0

**您需要在此操作中構建一些邏輯,以重定向已登錄到目標網頁的「註冊用戶」。**我認爲這是OP所苦苦掙扎的部分。 – 2013-03-11 01:12:54