ASP.NET Internet安全Forms身份验证方法(5)

              /*

              //这里演示如何在Global.asax自定义角色

        void RoleManager_GetRoles(object sender, RoleManagerEventArgs e)

        {

            if (e.Context.Request.IsAuthenticated)

            {

                e.Context.User = new GenericPrincipal(new GenericIdentity(e.Context.User.Identity.Name), new string[] { "Admins" });

                e.RolesPopulated = true;

            }

        }

              */

              //如果e.RolesPopulated为真,代表开发人员自己创建了角色信息,

//RoleManagerModule就不会 生成RolePrincipal 对象了.

              return;

     }

}

......

if (!(context.User is RolePrincipal))

{

     context.User = new RolePrincipal(context.User.Identity);

}

Thread.CurrentPrincipal = context.User;

注意:我们并没有像ASP.NET1.1中那样在AuthenticateRequest事件中生成User对象.但是User对象会在FormsAuthenticationModuleHTTP模块中使用Forms身份验证的特定Cookie重新被包装成一个GenericPrincipal对象(角色为空).

在说明RolePrincipal对象有什么用之前,需要了解这个对象是何时被用到的.

UrlAuthorizationModule被初始化时中向HttpApplication对象注册的事件AuthorizeRequest被触发.在这个事件中会调用RolePrincipal对象(就是Context.User)的方法IsInRole, IsInRole方法会自动查找角色提供程序(本示例使用默认提供程序AspNetSqlProvider,数据库为前面自动生成的ASPNETDB.MDF),并验证用户角色,代码截图如下:

ASP.NET Internet安全Forms身份验证方法

而IsUserAllowed方法最终会调用RolePrincipal对角的IsInRole方法来判断当前用户是否拥有某角色,方法截图如下:

ASP.NET Internet安全Forms身份验证方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjjpwp.html