使用AjaxPro有一段时日了,感觉是AjaxPro功能虽然没有Asp.net Ajax那么强大,但是很够用,大家关注这个框架大多终止在Asp.net 1.x .可是我认识这个框架的时候,最新版本已经能很好的支持.Net2.0的一些新的特性,比如AuthenticationService(Membership),ProfileService.在这个系列中,我会总结过去一段时间的一些新的发现,包括服务器和客户端的,这里我需要告诉大家,AjaxPro 的客户端也是值得一说的.
我这里介绍的内容都是建立在你对AjaxPro 有一定的了解的基础上的,多一句嘴
Authentication Service
成员资格管理是.Net2.0中的一个新特性,它提供了基于角色的验证和访问控制,在客户端是通过Cookie存储用户的信息,也有使用Cookiless,AjaxPro 只能在Cookie验证的情况下才能使用
首先下载支持.Net2.0的AjaxPro框架,在web.config里注册HttpHandler就OK了
<!--Http handler for AjaxPro-->
<httpHandlers>
<add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
</httpHandlers>
页面里注册AjaxPro.Services.AuthenticationService:
<httpHandlers>
<add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
</httpHandlers>
//AjaxProAuthenticationService.aspx.cs
public partial class AjaxProServices : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxPro.Services.AuthenticationService));
AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxProServices));
}
}
客户端能使用的方法有以下三个:
public partial class AjaxProServices : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxPro.Services.AuthenticationService));
AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxProServices));
}
}
- AjaxPro.Services.Authentication.Login(UserName,Password,callback):callback回调函数参数result.value为bool型,验证成功为true,否则为false .
- AjaxPro.Services.Authentication.ValidUser(callback):检查是否通过身份,callback参数result.value返回true/false.
- AjaxPro.Services.Authentication.Logout();用户注销,可以不需要回调函数
基于方法的权限控制
在支持.Net2.0 的AjaxPro版本中可以控制客户端方法的访问权限.Michael Schwarz在他的文档里提供了这么一个方法
[AjaxPro.AjaxMethod]
[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
[PrincipalPermission(SecurityAction.Deny, Name="?")]
public DateTime GetServerTime()
{
return DateTime.Now;
}
使用PrincipalPermissionAttribute可用于以声明方式要求运行您的代码的用户属于指定的角色或者已经过身份验证,上面的方法允许角色Admin访问同时拒绝匿名用户访问,这个方法不限于AjaxPro ,可以在.Net2.0环境中使用.其标记属性包括
[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
[PrincipalPermission(SecurityAction.Deny, Name="?")]
public DateTime GetServerTime()
{
return DateTime.Now;
}
- Action:SecurityAction枚举型,值可以为Assert, Demand, InheritanceDemand, LinkDemand, PermitOnly, RequestMinimum, RequestOptional, RequestRefuse.
- Role:允许访问或者拒绝的角色名
- Name:针对某用户的权限控制,*表示全部,?表示匿名.
- Authenticated:true/false,是否要求身份验证
- Unrestricted:true/false不限制访问
与Asp.net Ajax 比较起来,AjaxPro的使用比较简单,功能也大相径庭,有AuthenticationService自然会有ProfileService,下篇文章介绍