我想在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
我该怎么办?你能告诉我一种实施方法吗?
答案 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.asax
在Application_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 ;
}
}
}
根据您的代码可能需要添加一些细节,但这是一般的想法。