RoleProviderPrincipal顾名思义,就是基于ASP.NET RoleProvider授权模式下产生的安全主体。 如果采用UseAspNetRoles模式,通过RoleProvider属性得到用于获取角色列表的RoleProvider。 PrincipalPermissionMode和RoleProvider在DispatchRuntime中的定义如下所示。 从下面的代码片断中可以看到PrincipalPermissionMode和RoleProvider两属性依然定义在ServiceAuthorizationBehavior中。 RoleProvider { get; set; } 10: }
ASP.NET Roles同样采用策略设计模式,角色的添加、删除、获取以及授权功能定义在System.Web.Security.RoleProvider这个抽象类中。 而ASP.NET默认提供了如下三个具体的RoleProvider,它们同时也体现了角色和授权信息的三种不同的存储形式。如果它们还不能满足你的具体授权要求,你还可以自定义RoleProvider。 属性指定一个具体的RoleProvider。 至于RoleProvider的获取,你可以通过Roles的Provider得到默认的RoleProvider。 此外,Roles还具有一个类似于字典类型的Providers属性返回所有配置的RoleProvider列表,你可以通过传入配置名称获取相应的RoleProvider。
ASP.NET Roles同样采用策略设计模式,角色的添加、删除、获取以及授权功能定义在System.Web.Security.RoleProvider这个抽象类中。 而ASP.NET默认提供了如下三个具体的RoleProvider,它们同时也体现了角色和授权信息的三种不同的存储形式。如果它们还不能满足你的具体授权要求,你还可以自定义RoleProvider。 属性指定一个具体的RoleProvider。 至于RoleProvider的获取,你可以通过Roles的Provider得到默认的RoleProvider。 此外,Roles还具有一个类似于字典类型的Providers属性返回所有配置的RoleProvider列表,你可以通过传入配置名称获取相应的RoleProvider。
AspRoleAuthorizationCallContextInitializer具有一个RoleProvider属性,表示用于获取当前用户角色列表的RoleProvider,该属性在构造函数中被初始化 在实现的GetPrincipal抽象方法中,借助于RoleProvider获取基于当前用户的所有角色,并创建GenericPrincipal。 RoleProvider { get; private set; } 4: public AspRoleAuthorizationCallContextInitializer(RoleProvider roleProvider) 5: { 6: this.RoleProvider = roleProvider; 7: } 8: protected 而构造函数中具有一个可选的参数roleProviderName表示采用的RoleProvider配置名称。
其实MS早就为我们考虑到了,用户只要从MemberShipProvider和RoleProvider派生自己的Provider类,并实现相关的方法和属性就可以了,其实ASPX中的MemberShip功能就是这二个抽象类在 summary> /// MyRoleProvider 的摘要说明 /// public class MyRoleProvider:System.Web.Security.RoleProvider
接着,创建相关的Provider,分别继承MembershipProvider和RoleProvider即可。 false; } #endregion } 自定义Role Provider,如下所示: public class FBA_CustomMembershipProvider:RoleProvider
3.当添加Authorize(Roles=“admin,Member”)]时的步骤如下: ---利用asp.net自带的角色提供者,或者实现自己的角色提供者,实现自己的角色提供者时,只需要集成RoleProvider ---在适当的Action中利用Roles类型来访问自己创建的RoleProvider中的相关方法。
public ServiceAuthenticationManager ServiceAuthenticationManager { get; set; } 6: public RoleProvider RoleProvider { get; set; } 7: public ReadOnlyCollection<IAuthorizationPolicy> ExternalAuthorizationPolicies 它们包括用于进行认证的ServiceAuthorizationManager,用于进行授权的ServiceAuthorizationManager,以及在在ASP.NET Roles安全主体权限模式下实现授权采用的RoleProvider
它和MebershipProvider, RoleProvider一起组成了用户信息,权限管理这样一套完整的框架。下面我们就来看看如何用ProfileProvider来扩展我们想要的用户信息。 加上我们前面学到的MembershipProvider,RoleProvider那么我们很轻松就可以将这一系列登录、授权、认证以及用户模块相关的功能完成了。
当你按“如何去做”所讲解的内容去开发程序的时候,对于你的用户,你仍是一名程序员;但对于实现了MembershipProvider 和 RoleProvider 抽象类的微软开发人员来说,你已经成了他们的一个用户
对于ASP.NET Roles提供程序来说,System.Web.Security.RoleProvider抽象类是其基础,主要使用其子类SqlRoleProvider来处理,其配置如下所示。
DispatcherRuntime是整个WCF服务端运行的核心,其包含很多扩展组件,例如关于安全的ServiceAuthenticationManager、ServiceAuthorizationManager、RoleProvider
ASP.NET自带的 RoleProvider就是基于这个对象来实现的。