applic:Visual Studio 2008中ASP.NET AJAX的新应用程序服务:Role Applic..

ASP.NET AJAX在目前版本中已经内建了两种Application Service:用户身份认证(Authentication Service)和用户个性化(Profile)(请参考:《在ASP.NET AJAX中使用应用程序服务和本地化(0):目录》)。

在最新的Visual Studio 2008 (Orcas)中,ASP.NET AJAX又添加了一个新的Application Service:Roles。

《ASP.NET AJAX in Action》的作者David Barkol在blog上给出了一小段介绍。在ASP.NET AJAX JavaScript Class Browser中,我们可以看到最新的RoleService组件:



使用起来也非常类似现有的Application Service。首先在web.config中添加配置:

〈sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"〉
〈section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" /〉
〈section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" /〉
〈section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" /〉
〈section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" /〉
〈/sectionGroup〉
还有一部分:

〈system.web.extensions〉
〈scripting〉
〈webServices〉
〈authenticationService enabled="true" requireSSL = "false"/〉
〈profileService enabled="true" /〉
〈roleService enabled="true"/〉
〈/webServices〉
〈scriptResourceHandler enableCompression="true" enableCaching="true" /〉
〈/scripting〉
〈/system.web.extensions〉
然后他又给出了一段示例代码:

function pageLoad(){
loadRoles();
}

function loadRoles(){
Sys.Services.RoleService.load(onLoadRolesCompleted, onLoadRolesFailed, null);
}

function onLoadRolesCompleted(result, userContext, methodName){
if (Sys.Services.RoleService.isUserInRole("Administrator")){
$get("adminView").style.display = "block";
}
}

function onLoadRolesFailed(error, userContext, methodName){
alert(error.get_message());
}
Michael Schwarz看到了David的这个帖子,并在他的Blog中对上述这段示例代码进行了解释。还指出了这样实现的一个潜在问题,那就是如何防止本来没有某种权限的用户调用某个服务器端方法。

这里他坚毅的解决方案是使用PrincipalPermissionAttribute属性,并在从前的帖子中给出了一段示例代码(这个示例代码针对的是AjaxPro,不过对于ASP.NET AJAX也依然适用):

[AjaxPro.AjaxMethod]
[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
public static string AdminMethod()
{
return "Hello Admin, you can get this text only if you are a Admin!";
}

[AjaxPro.AjaxMethod]
[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
[PrincipalPermission(SecurityAction.Demand, Role = "Editor")]
public static string EditorAndAdminMethod()
{
return "Hello Editor or Admin, both roles can see this text!";
}
Tags:  applic

延伸阅读

最新评论

发表评论