我们的目的是让每个用户都有自己的个性化空间,而只有管理员才能改变共享范围。 我们还将研究如何配置自己的SqlPersonalization提供者来储存个性化数据。 一、配置用户范围和共享范围的个性化 为了让用户范围和共享范围的个性化发挥作用,必须授权用户组可以个性化。缺省状态下所有用户可以使用用户范围,不允许用户改变共享范围。 缺省配置在下面目录的Web.Config里。 Windows\Microsoft.NET\Framework\v2.0.xxxxx\config\ 缺省配置如 Listing 1 Web.Config <webParts> <personalization> <authorization> <deny users="*" verbs="enterSharedScope" /> <allow users="*" verbs="modifyState" /> </authorization> </personalization> </webParts> 第一个授权是防止用户进入共享范围。第二个授权是允许用户进入个性化webpart。 为了授权管理员改变共享范围,需要覆盖缺省配置。如下: Listing 2. Web.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<webParts>
<personalization>
<authorization>
<allow users="*" verbs="modifyState" />
<allow roles="Administrators" verbs="enterSharedScope" />
</authorization>
</personalization>
</webParts>
</system.web>
</configuration>
|
为了授权管理员改变共享范围,需要覆盖缺省配置。如下: 授权用户和角色以后,有两种方式展示个性化:初始化WebPartPersonalization类。如要缺省为共享范围,WebPartManager应为下面样式。 <asp:WebPartManager id="WebPartManager1" Personalization-InitialScope="Shared" Runat="server" /> 如果用户授权进入共享范围,也可以改变共享范围。如果没有授权改变共享范围,页面只能保持用户范围的个性化。 页面已经Page PreInit时,就不能更改初始范围。 要改变只能用ToggleScope()方法,这是一种非常好的方法,只有把个性化管理器加进webpart,就可以在用户范围和共享范围之间切换。 二、配置个性化数据库 缺省情况下,个性化数据库存放在APP_Data 目录下一个名为ASPNETDB.mdf的SQL Server 2005 Express 数据库里。如果要采用其他数据库(SQL Server 2000 或者 SQL Server 2005),需要做两件事。 1. 建立数据库 2、修改应用web配置文件 对于第一个可执行下面目录的程序自动安装必要的数据库。 Windows\Microsoft.NET\Framework\v2.0.xxxxx\aspnet_regsql.exe 除了aspnet_regsql.exe外,还可以在相同目录下找到下面sql脚本 InstallCommon.sql --首先运行 InstallPersonalization.sql --然后再运行。 UninstallCommon.sql --卸载InstallCommon.sql UninstallPersonalization.sql --卸载InstallPersonalization.sql. 完成了配置个性化数据库以后,还需要让web配置文件指向新的数据库。下例中我们把个性化数据库命名为AppData放在名为DataServer服务器上。 Listing 3. Web.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings>
<add
name="DataServer"
connectionString="Server=DataServer;Trusted_Connection=true;
Database=AppData"/>
</connectionStrings>
<system.web>
<webParts>
<personalization defaultProvider="MyPersonalizationProvider">
<providers>
<add
name="MyPersonalizationProvider"
type="System.Web.UI.WebControls.WebParts.SqlPersonalizationProvider"
connectionStringName="DataServer" />
</providers>
<authorization>
<allow users="*" verbs="modifyState" />
<allow roles="Administrators" verbs="enterSharedScope" />
</authorization>
</personalization>
</webParts>
</system.web>
</configuration>
|
<webParts>节下面包含<personalization>分节。defaultProvider属性指向名为定义在<providers>节里的MyPersonalizationProvider。provider使用了SqlPersonalization以及名为“DataServer”数据库连接字符串。 DataServer连接字符串定义在配置文件上部指向服务器名为DataServer,数据库名为AppData 。诚然也适用于其他数据库字符串。 |