这句不行得把userid换掉,不然会提示找不到
继续向前-------------------努力成为高手
楼主您好,
public void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (this.Request.IsAuthenticated)
{
//这里简化了操作,可以从数据库中获得角色信息用以构造rolesStrArr数组。作为示例,我们为除了a之外的用户分配了管理员角色
string[] rolesStrArr;
if (this.Context.User.Identity.Name == "a")
{
rolesStrArr = new string[]{"普通用户"};
}
else
{
rolesStrArr = new string[]{"普通用户","管理员"};
}
this.Context.User = new System.Security.Principal.GenericPrincipal(this.User.Identity, rolesStrArr);
}
}
你的这端代码是不是少了些东西,只更新了this.Context.User的引用应该不可以吧,因为webconfig在权限管理上是通过数据库访问实现的,所以你应该把添加的Role Update一下,要不然它的Roles还是原来没添加之前的。
[此贴子已经被作者于2007-6-15 12:41:54编辑过]
webconfig默认会把无权限的用户跳转到Login.aspx,如果没有这个页面就会出现HTTP401未经授权错误,你可以通过修改webconfig的<forms loginUrl="Login.aspx"/>节来修改返回Url地址。
[此贴子已经被作者于2007-6-15 12:49:56编辑过]
楼主您好,
public void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (this.Request.IsAuthenticated)
{
//这里简化了操作,可以从数据库中获得角色信息用以构造rolesStrArr数组。作为示例,我们为除了a之外的用户分配了管理员角色
string[] rolesStrArr;
if (this.Context.User.Identity.Name == "a")
{
rolesStrArr = new string[]{"普通用户"};
}
else
{
rolesStrArr = new string[]{"普通用户","管理员"};
}
this.Context.User = new System.Security.Principal.GenericPrincipal(this.User.Identity, rolesStrArr);
}
}
你的这端代码是不是少了些东西,只更新了this.Context.User的引用应该不可以吧,因为webconfig在权限管理上是通过数据库访问实现的,所以你应该把添加的Role Update一下,要不然它的Roles还是原来没添加之前的。
前面已经说过,实际上这里是做过简化的。原理很简单,用户拥有的角色名称可以是一个或者多个,他们实际上是以一个字符串数组的形式表示,这个数组有多少个字符串元素,那么用户就有多少个角色。
即使是使用数据库存储,那没有关系。我们不关心你在数据库中如何存储和实现,只是在这个地方,你能够构造适当的逻辑,为用户持有的角色表现成字符串数组就可以了。
只有Context.User属性是可写的,其他User属性只可以获取而不能设置。实际上这是在一个HttpApplication的Context中实现Iprincipal接口的对象,它会传播到稍后构造的Page对象对象和Request对象中。
至于“Role Update一下”我不太清楚你的表述是何含义。
楼主真是好厉害~~向楼主学习!!!顶