簡體   English   中英

MVC RoleProvider和Authorize屬性

[英]MVC RoleProvider and Authorize attribute

我已經實現了自己的角色提供程序,而我沒有使用默認的角色提供程序。 它的工作原理是,它可以告訴某人應該或不應該能夠查看頁面。

但是,它可以執行以下操作:

  1. 如果用戶未登錄,請重定向到我的登錄頁面
  2. 如果用戶已登錄但沒有正確的角色,請重定向到其他頁面

我還沒有弄清楚如何使用Authorize屬性執行此操作,我只有:

[Authorize(Roles="Admin")]

基本上我需要根據授權的哪個部分失敗重定向到不同的頁面。

我已經看過它是否是web.config中的內容,但沒有明顯的跳出來。

VoodooChild回答#1。

對於#2 -

您可以做的是檢查用戶是否登錄登錄頁面並顯示不同的消息或完全不同的頁面(甚至重定向到不同的操作)。

或者,您可以創建自己的授權屬性。 這將要求您在任何地方使用此屬性而不是默認的AuthorizeAttribute

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAuthenticated)
        {
            filterContext.Result = new RedirectToRouteResult(
                               new RouteValueDictionary 
                               {
                                   { "action", "ActionName" },
                                   { "controller", "ControllerName" }
                               });
        }
        else
            base.HandleUnauthorizedRequest(filterContext);
    }
}

更新:

想到另一種方法。 當從不同頁面對login頁面進行重定向時,也會傳遞查詢字符串ReturnUrl 因此,您還可以檢查它是否包含某些內容並且用戶已通過身份驗證,用戶可能無權查看該頁面。

如果您正在使用FormsAuthentication,那么請回答您的第一個問題 - 是如果用戶未經過身份驗證或登錄,則可以將其重定向到登錄頁面:

確保你在web.config文件中有這個(不確定你是否需要任何東西,將調查它..)

<authentication mode="Forms">
  <forms loginUrl="~/AccountController/LogOn" timeout="2880" />
</authentication>

要回答第二個問題:“如果用戶已登錄但沒有正確的角色,請重定向到其他頁面”

我們這樣做的方式是,我們使用System.Web.Security.Roles.GetRolesForUser(username); 獲取角色的方法,並在此基礎上我們將用戶重定向到正確的視圖,登錄后。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM