从基页控制身份验证

时间:2012-12-02 21:42:43

标签: c# asp.net oop c#-4.0

我想在asp.net中控制用户身份验证。

假设; 有两个来自StackOverflow.aspx和Default.aspx的网站。

我想通过以下代码获得经过身份验证的角色:

public List<Roles> GetAuthenticatedRolesByModuleName(string moduleName)
{
    //below I wrote psedeu code
    var roles = "Select * From SiteRoles Where ModuleName = "Admin";
    //...   
}
//This function returns a result set which includes roles authentication for `moduleName` parameter.

我将使用当前登录系统的角色来控制它。

我想在asp.net的基页中这样做。

为了做到这一点,我制作了一个继承自BasePage.cs的{​​{1}}。 我想将System.Web.UI.Page函数写入GetAuthenticatedRolesByModuleName,当用户输入BasePage.cs时,我想从StackOverflow.aspx调用该函数。

BasePage.cs有网页加载事件,我认为我必须控制StackOverflow.aspx中的角色。

我用谷歌搜索并找到一些来源,例如:ASP.net "BasePage" class ideas 但我不明白。

我想从基页功能获取角色(moduleName是堆栈溢出 - &gt; Init())并使用当前角色进行控制。 如果用户未经过身份验证,我会将其重定向到GetAuthenticatedRolesByModuleName(stack-overflow)

Default.aspx

我该怎么办?你能告诉我一种实施方法吗?

1 个答案:

答案 0 :(得分:1)

如果您使用OnpreInit创建基页进行全局检查,或OnInit将以某种方式进行全局检查:

public abstract class BasePage : System.Web.UI.Page
{
    protected override void OnPreInit(EventArgs e)
    {
        string cTheFile = HttpContext.Current.Request.Path;

        // here select what part of that string you won to check out
        if(!GetAuthenticatedRolesByModuleName(cTheFile))
        {
            // some how avoid the crash if call the same page again
            if(!cTheFile.EndsWith("Default.aspx"))
            {       
                Response.Redirect("Default.aspx", true);
                return ;
            }
        }

        // continue with the rest of the page
        base.OnPreInit(e);
    }
}

但您也可以使用global.asaxApplication_AuthenticateRequest上进行相同的检查:

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    // αυτό είναι το path...
    string cTheFile = HttpContext.Current.Request.Path;

    // here select what part of that string you won to check out
    if(!GetAuthenticatedRolesByModuleName(cTheFile))
    {
        // some how avoid the crash if call the same page again
        if(!cTheFile.EndsWith("Default.aspx"))
        {       
            Response.Redirect("Default.aspx", true);
            Response.End();

            return ;
        }
    }
}       

根据您的代码可能需要添加一些细节,但这是一般的想法。