adoney

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

作者: 飞翔的鱼
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 节点:
           <SecurityClass Name="FileIOPermission"
           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中将显示选择的国家名。

posted on 2006-08-15 14:52  Adoney  阅读(282)  评论(1编辑  收藏  举报