基于Forms的角色验证不能访问权限控制页面

lovebaby 2010-03-16 10:57:22
我做了一个登录页面,采用了基于Forms的角色验证,登录及验证包括写入Cookies都正常,但发现配置了相关的角色信息后,用具有该角色的用户也不能访问配置页面。
---------------------------------------------------
目录结构:
根目录
根目录/Admin 后台管理目录
---------------------------------------------------
根目录的Web.Config主要代码:

<authentication mode="Forms">
<forms loginUrl="Admin/Login.aspx" name=".ASPXAUTH" timeout="30" path="/"></forms>
</authentication>


Admin目录下的Web.Config主要代码:

<configuration>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>

<location path="DbManager.aspx">
<system.web>
<authorization>
<allow roles="Admins"/>
<deny users="*"/>
</authorization>
</system.web>
</location>

<location path="CreateCode.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>

<location path="Login.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>

Login.aspx.cs代码

if (AdminBll.ValidateLogin(myAdmin) == LoginResult.OK)
{
ClientScript.RegisterStartupScript(Page.GetType(), "", MessageBox.Alert("登陆成功"));
string userRoles = "Admins"; //为测试方便直接填写的角色字符串
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, _UserName, DateTime.Now, DateTime.Now.AddMinutes(30), false, userRoles, "/");
string HaskTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie UserCookies = new HttpCookie(FormsAuthentication.FormsCookieName, HaskTicket);
Response.Cookies.Add(UserCookies);
if (string.IsNullOrEmpty(Request["ReturnUrl"]))
{
Response.Redirect("index.aspx");
}
else
{
Response.Redirect(Request["ReturnUrl"]);
}
}

Global.asax中关键代码:

void Application_AuthorizeRequest(object sender, System.EventArgs e)
{
HttpApplication App = (HttpApplication)sender;
HttpContext Ctx = App.Context; //获取本次Http请求相关的HttpContext对象
if (Ctx.Request.IsAuthenticated == true) //验证过的用户才进行role的处理
{
FormsIdentity Id = (FormsIdentity)Ctx.User.Identity;
FormsAuthenticationTicket Ticket = Id.Ticket; //取得身份验证票
string[] Roles = Ticket.UserData.Split(','); //将身份验证票中的role数据转成字符串数组
Ctx.User = new System.Security.Principal.GenericPrincipal(Id, Roles); //将原有的Identity加上角色信息新建一个GenericPrincipal表示当前用户,这样当前用户就拥有了role信息
}
}

如上所述,登录及验证匿名用户部分都没有问题,也能正常写入Cookies,登录之后通过

FormsIdentity Id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket Ticket = Id.Ticket; //取得身份验证票

也可以取得Ticket中的数据,包括UserData,但我在Admin目录下的DbManager.aspx配置了只有Admins角色的用户才可访问,其他角色用户不可访问,但测试结果确是这样配置之后连具有Admins角色的用户也不能访问这个页面了。不知道问题出在哪里
...全文
91 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bo_301 2010-03-17
  • 打赏
  • 举报
回复
新建的web技术交流群,欢迎大家加入一起讨论:
群号:29037453
lovebaby 2010-03-17
  • 打赏
  • 举报
回复
再顶一下
anbs01 2010-03-16
  • 打赏
  • 举报
回复

回复内容太短了!
lovebaby 2010-03-16
  • 打赏
  • 举报
回复
有没有知道问题出在哪的?
lovebaby 2010-03-16
  • 打赏
  • 举报
回复
有没有知道原因的?
lovebaby 2010-03-16
  • 打赏
  • 举报
回复
那这样的话就需要手动去写角色判断代码了,在XML中配置的

<location path="DbManager.aspx">
<system.web>
<authorization>
<allow roles="Admins"/>
<deny users="*"/>
</authorization>
</system.web>
</location>

岂不就没用了吗?
Jelly_tracy 2010-03-16
  • 打赏
  • 举报
回复
在需要控制权限的页,判断角色,如果角色不符,跳出去...

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧