香草ASP .NET中MVC的AuthorizeAttribute等效于什么?

时间:2018-06-25 20:20:03

标签: asp.net

我刚刚开始与一家使用ASP .NET编写Web应用程序的公司合作,但该公司未使用Web API或MVC或Winforms。严格来说,它只是原始的原始ASP .NET。

大多数网络方法如下:

void Page_Load(Object sender, EventArgs e)
{
    AuthContext ac = AuthSession.ValidateSession(HttpContext.Current);
    if (ac.HasPrivilege((int)UserPrivilege.KeyReporting))
    {
        XmlTreeBuilder xtb = new XmlTreeBuilder("Root");
        // code to build xml tree goes here
        divContent.InnerHtml = WebUtil.XslTransform(xtb.GetXmlReader(), 
                                                    Server.MapPath("kpiSummary.xsl"));
    }
    else
    {
        divContent.InnerHtml = "Access denied";
    }
}

为了在这里完成,页面的html(ish)部分看起来像这样:

<asp:Content id="MainContent" ContentPlaceHolderID="MainContent" Runat="Server">
    <div id="divContent" runat="server"></div>
</asp:Content>

因此,如果这是MVC,则通过编写自定义AuthorizationAttribute来创建如下所示的代码,将C#代码重构为将所有授权逻辑仅粘贴到可重用的数据属性中就没有问题了。

[HasPrivilege(Name = UserPrivilege.KeyReporting, FailMessage = "Access denied"))]
void Page_Load(Object sender, EventArgs e)
{
        XmlTreeBuilder xtb = new XmlTreeBuilder("Root");
        // code to build xml tree goes here
        divContent.InnerHtml = WebUtil.XslTransform(xtb.GetXmlReader(),
                                                    Server.MapPath("kpiSummary.xsl"));
}

所以我想问题是“在ASP .Net中甚至可能吗?如果可以,我该如何解决?”

我知道显而易见的答案是“用MVC重写整个应用程序”,但目前还不现实。因此,请不要让我为我的技术栈感到困难。我只是想发挥我的能力。

1 个答案:

答案 0 :(得分:0)

我个人喜欢基于活动的授权的想法。您可以找到有关here的更多信息,以及一些here的更多信息。

基本上,前提是您不必将授权逻辑与Active Directory中定义的特定角色相关联,而应将其与可以在应用程序内执行的活动相关联。这些活动可以基于角色或您用来控制应用程序中的授权的其他方式。关键是,您的代码引用的是Activity而不是特定的角色。

过去,我使用了this site中的一些示例,这些示例使您可以创建类似的自定义属性,并在其中应用授权逻辑来确定用户是否可以访问功能。这不是MVC(甚至Web)特定的。我最近在Winforms应用程序中使用了此功能,以控制对某些功能的访问。