Page.User 有什么用?

风声3 2007-01-29 11:33:07
我是一个ASP.NET初学者,没有ASP.NET 1.1的基础,直接学习2.0来的,遇到很多问题,希望得到大家的讨论和帮助!

提这个问题,请大家不要见笑,我发现定义里Page.User类型为一接口,其具体实现在哪都不知道,而且它的IIdentity Identity 值是如何来的,如何最终代表了访问者也不清楚。当然这些问题如果使用成员资格和角色就都不用管了,但是几经比较之后我还是决定自己写权限管理,这种情况下:Page.User还有用吗,或者我应该自己干预Page.User的一些动作,使它与自定义的用户系统关联?

以下是我看到的一些东西:
-----------------------
查看定义得知:
public class System.Web.UI.Page
{
// ……
public IPrincipal User { get; }
// ……
}
继续跟踪:
public interface System.Security.Principal.IPrincipal
{
IIdentity Identity { get; }
bool IsInRole(string role);
}
继续跟踪:
public interface System.Security.Principal.IIdentity
{
string AuthenticationType { get; }
bool IsAuthenticated { get; }
string Name { get; }
}
...全文
719 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
风声3 2007-01-29
  • 打赏
  • 举报
回复
谢谢Ivony() uno(钢盅郭子) 谢谢大家
uno 2007-01-29
  • 打赏
  • 举报
回复
asp.net的form验证的确没有成员资格和角色模块

但是这不代表对页面访问的授权也自己实现

web.config里写上rolse信息是有效的,asp.net 1.1缺少的逻辑只是——身份验证cookie里记录的角色信息不会自动写入User对象,所以要自己写代码转换
风声3 2007-01-29
  • 打赏
  • 举报
回复
ASP.NET 1.1都需要自己做验证吧,成员资格和角色模块好像2.0才有的
风声3 2007-01-29
  • 打赏
  • 举报
回复
谢谢,理解你的用意了
测试一下代码,代码还要消化
uno 2007-01-29
  • 打赏
  • 举报
回复
User对象在很多时候是一个不需要我们干预的对象,除非你需要将自己的权限管理逻辑与asp.net的身份验证及授权机制绑定

个人以为,如果系统的规模不大,自己实现一套身份验证及授权机制是很得不偿失的
uno 2007-01-29
  • 打赏
  • 举报
回复
简单的说,就是:

1、使用asp.net提供的验证模式,Page.User会记录了当前请求所包含的用户身份信息
2、这些信息可以在AuthenticateRequest事件处理方法中用自己的权限管理逻辑重写
3、默认情况下,asp.net应用程序将按web.config的配置项,根据Page.User中的信息决定页面是否可被当前请求访问
风声3 2007-01-29
  • 打赏
  • 举报
回复
To uno(钢盅郭子)
--------------
没看明白
我尝试了一下还是没理解你的意思
Ivony 2007-01-29
  • 打赏
  • 举报
回复
楼主:但是几经比较之后我还是决定自己写权限管理,这种情况下:Page.User还有用吗,或者我应该自己干预Page.User的一些动作,使它与自定义的用户系统关联?

BTW,我只是说明偶木有误导,免得楼主无所适从而已……
uno 2007-01-29
  • 打赏
  • 举报
回复
如果楼主自己做身份验证,显然在身份验证的时候把授权也一起搞定了

*************************************************************

如果楼主真的想自己来,我是不反对的,累的又不是我
uno 2007-01-29
  • 打赏
  • 举报
回复
简而言之,当我们需要自定义用户身份验证时,可以将这些自定义的身份数据经过处理后存入User对象——上述例子就是把角色信息存入User对象,因为默认的Form验证是没有实现角色验证的

*****************************
至少ASP.NET 1.1有此必要
Ivony 2007-01-29
  • 打赏
  • 举报
回复
显然Identity不会是FormsIdentity
Ivony 2007-01-29
  • 打赏
  • 举报
回复
如果楼主自己做身份验证,显然在身份验证的时候把授权也一起搞定了,或者有自己的授权机制,你这段代码只是对Form身份验证一个授权扩展而已,况且自己做身份验证也可以把身份信息自己保存就是……
如果自己做身份验证你这段代码有何意义?
uno 2007-01-29
  • 打赏
  • 举报
回复
这段代码是用于在Form验证模式下实现web访问角色权限分配的

可以在web.config里配置
allow roles=""
deny roles=""
uno 2007-01-29
  • 打赏
  • 举报
回复
identity.Ticket就是每次用FormsAuthencation写入的Cookie的内容(经过Decrypt)

UserData就是创建Ticket时写入的数据,这里用于存放“权限/角色/用户组”
Ivony 2007-01-29
  • 打赏
  • 举报
回复
没看出楼上这段代码有什么意义……
uno 2007-01-29
  • 打赏
  • 举报
回复
这些代码是写在global.asax.cs或任何一个IHttpModule里的
楼主明白了么?
uno 2007-01-29
  • 打赏
  • 举报
回复
自己做验证,那个就没用了……

这种情况你你在用ASP.net自带的验证方式时候才有用的

*****************************

这两位有误导嫌疑

看代码:

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
 HttpApplication app = (HttpApplication)sender;

 if (app.Request.IsAuthenticated)
 { // 用户已在当前应用程序验证身份
  if (app.User.Identity is FormsIdentity)
  { // 若用户已登录整个构件库网站平台,且采用窗体验证方式
   FormsIdentity identity = (FormsIdentity)app.User.Identity; // 获取身份验证票
   char[] sp = {','};
   string[] roles = identity.Ticket.UserData.Split(sp); // 获取身份验证票中保存的用户角色信息(以","分隔的字符串)
   app.Context.User = new System.Security.Principal.GenericPrincipal(identity, roles); // 根据取得的用户角色信息创建角色对象
  }
 }
}

pizimiao 2007-01-29
  • 打赏
  • 举报
回复
up
foyuan 2007-01-29
  • 打赏
  • 举报
回复
这种情况你你在用ASP.net自带的验证方式时候才有用的

比如ASP.net 的 Form验证

其余情况没有用的
Ivony 2007-01-29
  • 打赏
  • 举报
回复
自己做验证,那个就没用了……
其实要实现很复杂的,你可以在你自己的验证完毕后,给HttpContext.Current.User赋值,这样,你在Page中就能得到用户信息了,你不想要就不用理会……
加载更多回复(2)

62,047

社区成员

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

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

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

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