请参阅this帖子。
我已经能够配置我的web.config
文件,以便当未经身份验证的用户请求页面时,他会被重定向到Login.aspx
页面。
我已经能够通过配置web.config文件和以下几行代码来实现这一点:
protected void btnLogin_Click(object sender, EventArgs e)
{
string username = this.usernameTextBox.Text;
string password = this.passwordTextBox.Text;
bool success = Membership.ValidateUser(username.Trim(), password.Trim());
if (success)
{
FormsAuthentication.SetAuthCookie(username, true);
Ice_Web_Portal.BO.User user = Ice_Web_Portal.BO.User.GetUserByUserName(username);
Ice_Web_Portal.BO.UserTypeEnum loginUserType = user.UserTypeEnum;
if (loginUserType == UserTypeEnum.Student)
{
Response.Redirect("~/Student/StudentControlPanel.aspx?username=" + username);
}
else if (loginUserType == UserTypeEnum.Teacher)
{
Response.Redirect("~/Teacher/TeacherControlPanel.aspx?username=" + username);
}
else if(loginUserType == UserTypeEnum.Webmaster)
{
Response.Redirect(@"~/Webmaster/WebmasterControlPanel.aspx");
}
else
{
labLoginMessage.Text = "Sorry! Type of user couldn't be determined!";
}
}
else
{
labLoginMessage.Text = Ice_Web_Portal.BO.User.LoginMessage;
}
}
但我遇到的问题是,一旦用户通过身份验证,他就可以访问整个Web应用程序中的所有页面。
但我需要根据他们的角色限制他们的页面访问区域。即当具有不同角色的用户请求页面时,他应该被自动重定向到Login.aspx
页面。
可能有一种技术可以检查Page_Load()-event
中的特定用户角色,然后将用户重定向到Login.aspx
页面,如果他不在该角色中。但我不想那样做。我想自动发生。我只需要使用角色提供程序框架和web.config文件(因为在成员资格的情况下。即我不需要检查Page_Load事件的成员资格.Web.config文件自动阻止访问)。
有人能告诉我如何在此中加入角色功能,以便将特定用户限制在其特定的角色区域内?
生成授权凭单的代码是什么?
答案 0 :(得分:4)
将部分添加到web.config
<location path="page-only-allowed-to-be-accessed-by-admin.aspx">
<system.web>
<authorization>
<allow roles="admin"/>
<deny users="*" />
</authorization>
</system.web>
</location>
您可能会发现这篇文章很有趣 - web.config demystified
修改强>
生成授权凭证的代码在您的代码中。
FormsAuthentication.SetAuthCookie(username, true);
这样实现(使用Red Gate's Reflector)
public static void SetAuthCookie(string userName, bool createPersistentCookie, string strCookiePath)
{
Initialize();
HttpContext current = HttpContext.Current;
if (!current.Request.IsSecureConnection && RequireSSL)
{
throw new HttpException(SR.GetString("Connection_not_secure_creating_secure_cookie"));
}
bool flag = CookielessHelperClass.UseCookieless(current, false, CookieMode);
HttpCookie cookie = GetAuthCookie(userName, createPersistentCookie, flag ? "/" : strCookiePath, !flag);
if (!flag)
{
HttpContext.Current.Response.Cookies.Add(cookie);
current.CookielessHelper.SetCookieValue('F', null);
}
else
{
current.CookielessHelper.SetCookieValue('F', cookie.Value);
}
}
RoleProvider将获取给定用户的角色,因此当检查web.config是否为应用程序的给定部分允许或拒绝角色/用户时,RoleProvider将获取用户的角色,然后检查允许/拒绝角色并在适当时进行授权。
答案 1 :(得分:2)
使用角色提供程序。
设置角色提供程序并为用户分配角色后,可以使用Web.config的<authorization>
部分根据角色成员资格限制对各种资源的访问。
如果您有可用的SQL Server,我建议您使用SqlRoleProvider。它非常灵活,它可以为用户名分配角色,而无需先注册用户 - 具体而言,您不需要也使用SqlMembershipProvider(或实际上任何成员资格提供者)。 IE浏览器。如果您将角色“Student”添加到用户名“John”,SqlRoleProvider将简单地将该角色与该用户名相关联,并且一切正常。
祝你好运!答案 2 :(得分:0)
如果您在文件夹中有一组受限文件,则可以在web.config中重新设置该文件夹的角色:
例如:
<location path="TeacherAdmin" allowOverride="false">
<system.web>
<authorization>
<allow roles="Teacher"/>
<deny users="*,?"/>
</authorization>
</system.web>
</location>
注意:path属性也可以指向特定的aspx页面