Skip to main content
 首页 » 编程设计

c#之代码访问安全和 Sharepoint WebParts

2024年01月13日26yyy_WW

我对代码访问安全性在 Sharepoint 中的工作方式有一个模糊的了解。

我开发了一个自定义 Web 部件并在我的 list 中设置了 CAS 策略

<CodeAccessSecurity> 
<PolicyItem> 
  <PermissionSet class="NamedPermissionSet" version="1" Description="Permission set for Okana"> 
    <IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" version="1" ObjectModel="True" Impersonate="True" /> 
    <IPermission class="SecurityPermission" version="1" Flags="Assertion, Execution, ControlThread, ControlPrincipal, RemotingConfiguration" /> 
    <IPermission class="AspNetHostingPermission" version="1" Level="Medium" /> 
    <IPermission class="DnsPermission" version="1" Unrestricted="true" /> 
    <IPermission class="EventLogPermission" version="1" Unrestricted="true"> 
      <Machine name="localhost" access="Administer" /> 
    </IPermission> 
    <IPermission class="EnvironmentPermission" version="1" Unrestricted="true" /> 
    <IPermission class="System.Configuration.ConfigurationPermission, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" version="1" Unrestricted="true"/> 
    <IPermission class="System.Net.WebPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" /> 
    <IPermission class="System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Unrestricted="true" /> 
    <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" PathDiscovery="*AllFiles*" /> 
    <IPermission class="IsolatedStorageFilePermission" version="1" Allowed="AssemblyIsolationByUser" UserQuota="9223372036854775807" /> 
    <IPermission class="PrintingPermission" version="1" Level="DefaultPrinting" /> 
    <IPermission class="PerformanceCounterPermission" version="1"> 
      <Machine name="localhost"> 
        <Category name="Enterprise Library Caching Counters" access="Write"/> 
        <Category name="Enterprise Library Cryptography Counters" access="Write"/> 
        <Category name="Enterprise Library Data Counters" access="Write"/> 
        <Category name="Enterprise Library Exception Handling Counters" access="Write"/> 
        <Category name="Enterprise Library Logging Counters" access="Write"/> 
        <Category name="Enterprise Library Security Counters" access="Write"/> 
      </Machine> 
    </IPermission> 
    <IPermission class="ReflectionPermission" version="1" Unrestricted="true"/> 
    <IPermission class="SecurityPermission" version="1" Flags="SerializationFormatter, UnmanagedCode, Infrastructure, Assertion, Execution, ControlThread, ControlPrincipal, RemotingConfiguration, ControlAppDomain,ControlDomainPolicy"  /> 
    <IPermission class="SharePointPermission" version="1" ObjectModel="True" /> 
    <IPermission class="SmtpPermission" version="1" Access="Connect" /> 
    <IPermission class="SqlClientPermission" version="1" Unrestricted="true"/> 
    <IPermission class="WebPartPermission" version="1" Connections="True" /> 
    <IPermission class="WebPermission" version="1"> 
      <ConnectAccess> 
        <URI uri="$OriginHost$"/> 
      </ConnectAccess> 
    </IPermission> 
  </PermissionSet> 
  <Assemblies> 
     .... 
  </Assemblies> 

当它被部署到 Sharepoint 服务器上时,它被正确地转换成一个 wss_custom_wss_minimaltrust.config 并且大部分工作。

为了让 WebPart 完全工作,但是我发现我需要在部署后手动修改 wss_custom_wss_minimaltrust.config 并在权限集上设置 Unrestricted="true"

 <PermissionSet class="NamedPermissionSet" version="1" Description="Permission set for MyApp" Name="mywebparts.wsp-86d8cae1-7db2-4057-8c17-dc551adb17a2-1"> 

到

<PermissionSet class="NamedPermissionSet" version="1" Description="Permission set for MyApp" Name="mywebparts.wsp-86d8cae1-7db2-4057-8c17-dc551adb17a2-1" Unrestricted="true"> 

这都是因为我正在从 Web 部件加载用户控件。我不相信有一种方法可以使用 CAS 来实现这一点,但我愿意被证明是错误的。

有没有办法在 list 中设置一些东西,这样我就不需要手动修复了?

谢谢

请您参考如下方法:

您的 web 部件是否在 bin 文件中?

您是否在程序集中设置了部分信任的调用方?

如果不这样做!这是最佳实践。