这句不行得把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编辑过]
楼主您好,
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一下”我不太清楚你的表述是何含义。