作者: 飞翔的鱼
http://xgp1226.blogdriver.com/xgp1226/610199.html
一、编辑策略文件
Windows SharePoint Services的默认安全设置的限制性很强,有时需要修改SharePoint站点的Web.config文件中的信任级别,或者创建和修改策略文件,以确保Web部件程序集能访问特定的资源。SharePoint站点的Web.config文件中的trust节点指定了服务器上运行的Web部件的默任安全级别:
其中level属性的可用值有:Full、High、Medium、Low、Minimal、WSS_Medium和WSS_Minimal。在这些级别中只有Full、WSS_Medium和WSS_Minimal三个级别允许Web部件运行。其他信任级别适用于ASP.NET,但是不包括Web部件所需的特定权限。通过修改Web.config可以提升Web部件的权限,但是这种做法是非常危险的,因为该权限会应用到整个SharePoint站点中。比较妥当的是修改策略文件。
level的每个信任级别都映射到一个XML策略文件,策略文件则列举了每个信任级别授予的权限集。例如:WSS_Minimal信任级别的权限在名为Wss_minimaltrust.config的文件中指定。在本例中需要修改 Wss_minimaltrust.config 文件,以便向Web部件授予文件I/O权限。下面是具体的修改步骤:
1. 指定任何必需的权限类
将以下代码行添加到服务器上 Wss_minimaltrust.config 文件的 SecurityClasses 节点:
Description="System.Security.Permissions.FileIOPermission, mscorlib,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
2. 定义权限集
将下面的权限集添加到 PermissionSet节点中:
<IPermission class="FileIOPermission" version="1" Unrestricted="true"/>
二、创建用户控件
创建一个ASP.NET Web应用程序项目,在项目中添加一个名为“SampleWebUserControl”的用户控件,在该用户控件中放入一个DropDownList控件和一个Lable控件。在SampleWebUserControl的Code-Behind文件(SampleWebUserControl.ascx.cs)的Page_Load事件中加入下面的代码:
if( IsPostBack )
{
DropListCountry.Items.Add("China");
DropListCountry.Items.Add("America");
DropListCountry.Items.Add("France");
}
添加DropDownList的SelectedIndexChanged事件,在SelectedIndexChanged事件处理函数中加入下面的代码:
string selectedValue = DropListCountry.SelectedValue;
lblCountry.Text = "This country you selected is " + selectedValue + "!";
lblCountry.ForeColor = Color.Red;
lblCountry.Font.Bold = true;
三、创建WebPart项目
创建一个名为SampleWebPartLibrary的WebPart项目。将自动生成的WebPart1改为SampleWebPart,并修改WebPart文件名以及.dwp文件。
把第二步中创建的“SampleWebUserControl”的三个文件(SampleWebUserControl.ascx、SampleWebUserControl.ascx.cs和SampleWebUserControl.ascx.resx)全部加入到此WebPart项目中。然后对SampleWebUserControl进行以下的修改:
1. 打开SampleWebUserControl.ascx文件的HTML编辑模式,删除第一行中的<%@ Control>标签的“CodeBehind”属性,并把“Inherits”属性的值改为“SampleWebPartLibrary.SampleWebUserControl”。
2. 打开SampleWebUserControl.ascx.cs文件,将第一行的名字空间改为和此项目一致的“SampleWebUserControl”:
namespace SampleWebUserControl
3. 选中解决方案资源管理器中的SampleWebUserControl.ascx,然后在SampleWebUserControl的属性窗口中,将“生成操作”属性的值改为“嵌入的资源”。
四、在Web部件中载入Resource信息并输:
打开SampleWebPart.cs文件,按照以下步骤对该文件进行修改:
1. 加载IO名字空间:
using System.IO;
2. 定义一个Control类型的对象,用于保存SampleWebUserControl:
private System.Web.UI.Control userControl;
3. 重载CreateChildControl()方法:
try
{
StreamReader reader;
reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("SampleWebPartLibrary.SampleWebUserControl.ascx"));
string resourceContent = reader.ReadToEnd();
reader.Close();
reader = null;
StreamWriter writer;
writer = new StreamWriter(this.Page.Server.MapPath("/wpresources/SampleWebUserControl.ascx"), false);
writer.Write(resourceContent);
writer.Close();
writer = null;
this.userControl = this.Page.LoadControl("/wpresources/SampleWebUserControl.ascx");
this.Controls.Add(this.userControl);
}
catch(Exception ex)
{
return;
}
4. 重载RenderWebPart()方法,以呈现载入的SampleWebUserControl:
try
{
this.EnsureChildControls();
output.Write("
");
this.userControl.RenderControl(output);
}
catch(Exception ex)
{
return;
}
SampleWebPart.cs文件中加入的代码如下:
///
/// Render this Web Part to the output parameter specified.
///
/// The HTML writer to write out to
protected override void RenderWebPart(HtmlTextWriter output)
{
try
{
this.EnsureChildControls();
output.Write("");
this.userControl.RenderControl(output);
}
catch(Exception ex)
{
return;
}
}
protected override void CreateChildControls()
{
try
{
StreamReader reader;
reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("SampleWebPartLibrary.SampleWebUserControl.ascx"));
string resourceContent = reader.ReadToEnd();
reader.Close();
reader = null;
StreamWriter writer;
writer = new StreamWriter(this.Page.Server.MapPath("/wpresources/SampleWebUserControl.ascx"), false);
writer.Write(resourceContent);
writer.Close();
writer = null;
this.userControl = this.Page.LoadControl("/wpresources/SampleWebUserControl.ascx");
this.Controls.Add(this.userControl);
}
catch(Exception ex)
{
return;
}
}
五、注册安全Web部件
修改虚拟站点中的Web.config文件,在
<SafeControl Assembly="SampleWebPartLibrary" Namespace="SampleWebPartLibrary" TypeName="*" Safe="True"/>
六、添加Web部件
在Web部件页中加入此部件。当选择不同的国家名时,Label中将显示选择的国家名。