2

ほら。

現在のユーザーが管理者であるかどうかに基づいて、条件付きルーティングを実現しようとしています。システムには、管理者または非管理者の 2 つのモードしかなく、それ以上のものはありません。コントローラー名は同じであるため、管理領域に領域を使用していますが、ほとんどの場合で異なる機能を提供します。

ただし、このシステムでは、管理者は管理者の場所を実際に認識している必要はありません。通常のユーザーが行うこととは別のことを行うためにシステムを使用していることを知っているだけです。このため、URL に関して 2 つを区別したくありません。私がやりたいことは、mysite.com/AuditHistory のようなことを実行できるようにすることであり、管理者であるかユーザーであるかによって、使用するコントローラーに依存します。したがって、このリクエストを行うユーザーの場合AuditHistoryControllerは通常のコントローラ フォルダを使用しますが、管理者の場合AuditHistoryControllerは Areas/Admin/Controllers を使用します。

私はの使用を見てきましたがIRouteConstraint、次の行に沿って何かを行うことができます:

public class AdminRouteConstraint : IRouteConstraint
{
    public AdminRouteConstraint() { }

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        return httpContext.User.IsInRole("Admin");
    }
}

以下を使用します。

context.MapRoute(
    "Admin_default",
    "Admin/{controller}/{action}/{id}",
    new { action = "Index", controller = "Home", id = UrlParameter.Optional },
    new { controller = new AdminRouteConstraint() }
);

前にある「Admin/」を単に取り除き、他のルートに対して同じことを行うことはできますUserRouteConstraintか? 私はこれがどこでも行われたのを見たことがなく、それが正しいかどうかもわかりません。

これを行う方法についてのアイデアはありますか?

4

1 に答える 1