0

AuthorizeAttribute を実装しようとしているので、特定の子アクションに適用できます。たとえば、その人が承認されてアクセスできるときにメニューを表示したり、エラーやリダイレクトなしでログインページに戻ったりすることを目的としています。私はいくつかの異なる返品オプションを試しましたが、成功しませんでした. 以下の例

//SideMenu.cshtml
    @{Html.RenderAction("AdminMenu", "Menu", "Menu");}

    @{Html.RenderAction("CommitteeMenu", "Menu", "Menu");}

    @{Html.RenderAction("MemberMenu", "Menu", "Menu");}

    @{Html.RenderAction("PublicMenu", "Menu", "Menu");}

//MenuController
         [BlockChildContentAuthorize(Roles = " Committee, Admin, Full_rights")]
         [ChildActionOnly]
         public virtual ActionResult CommitteeMenu()
         {
                 ....
         }

//Authorize.cs     
    public class BlockChildContentAuthorizeAttribute : AuthorizeAttribute
        {    

            protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
            {
                if (filterContext.IsChildAction)
                {
                    if (filterContext.HttpContext.Request.IsAuthenticated)
                    {

                    }
                    else
                    {
                        filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult(HttpStatusCode.Unauthorized);

                        return;
                    }
                }
            }
    }
4

1 に答える 1

0

カスタム属性からビューを直接操作することはできません。ユーザーが認証されていない場合は、このようなビューバッグを作成してビューで確認してください。

    protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
        {
         filterContext.Controller.ViewBag.IsAuthenticated = true;             
         if (filterContext.IsChildAction)
                {
                  if (!filterContext.HttpContext.Request.IsAuthenticated)
                  {
                  //User is not authenticated, Redirect to login page                                              
                  filterContext.Controller.ViewBag.IsAuthenticated = false;
                    }
                 //else user is authenticated, do nothing Action result will be executed.
                }else
               {
                 // not child action, perform operation.
               }         
        }

表示 - SideMenu.cshtml - 認証されていないユーザーは委員会メニューのリンクを表示できません (例)

    @{Html.RenderAction("AdminMenu", "Menu", "Menu");}
     @if(ViewBag.IsAuthenticated)
     {
     Html.RenderAction("CommitteeMenu", "Menu", "Menu");
     }
     @{Html.RenderAction("MemberMenu", "Menu", "Menu");}
     @{Html.RenderAction("PublicMenu", "Menu", "Menu");}

または、ビューでユーザー認証を直接確認できるため、カスタム属性を回避できます。

    //SideMenu.cshtml
    @{Html.RenderAction("AdminMenu", "Menu", "Menu");}
    @if(HttpContext.Current.Request.IsAuthenticated)
    {
      Html.RenderAction("CommitteeMenu", "Menu", "Menu");
    }
    @{Html.RenderAction("MemberMenu", "Menu", "Menu");}
    @{Html.RenderAction("PublicMenu", "Menu", "Menu");}
于 2013-07-21T15:36:02.493 に答える