Melhores práticas para gerar wsp com o código de acesso política de
-
10-12-2019 - |
Pergunta
Eu estou usando o sharepoint 2007 e visual studio 2008.Eu mudei algumas código personalizado em uma solução existente.Agora que eu terminei o desenvolvimento e a tentar gerar o arquivo wsp.Há apenas 1 problema.Preciso gerar um arquivo wsp com CAS política e NÃO para o gac.A pessoa que criou essa solução foi fazer com este cenário:
1) mudou a construir o caminho de saída para "80\bin".
2) fazer uma compilação de lançamento
3) gerar um wsp com wsp builder
4) altere a extensão de gerado o arquivo wsp para .cab
5) extraia o arquivo cab
6) localize e edite o manifest.xml
7) alterar o elemento:
<CodeAccessSecurity>
<PolicyItem>
<PermissionSet class="NamedPermissionSet" version="1" Description="WSPBuilder generated permissionSet" Name="MyCompany.MyCustomer.SharePoint.MySolutionNamed20708d8-8d7f-448d-ae19-52e93e729cc5">
<IPermission class="AspNetHostingPermission" version="1" Level="Minimal" />
<IPermission class="SecurityPermission" version="1" Flags="Assertion, Execution, ControlThread, ControlPrincipal" />
<IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" version="1" ObjectModel="True" UnsafeSaveOnGet="True" Unrestricted="True"/>
</PermissionSet>
<Assemblies>
<Assembly Name="MyCompany.MyCustomer.SharePoint.MySolutionName" Version="1.0.0.0" PublicKeyBlob="002400000480000094000000060200000024000052534131000400000100010061501CE5D2B707D9EE7AFE461FC262A07CD83D417AE9AC31B142586832A038C385DF5A19C4974B39E0EE5F166B4F9C1707987030522B7B5808D910E6C749BAC97EE79976273BA06516AD5D7DB9DD7C53D8A47B038479E627BB0B2AAE299D6F0C392AF7C00CE42D6A3FB25F391AAC36C5217AE98FBBD18AFE3736905FFF0058A4" />
</Assemblies>
</PolicyItem>
</CodeAccessSecurity>
8) salve o arquivo
9) crie o arquivo cab
10) crie o arquivo wsp
Alguém me disse que isso é a pior solução para o fazer.Deve ser possível com o wspbuilder na linha de comando.Alguém pode me dizer como fazer isso?
Solução
adicionar esta um pouco acima do seu público ficheiro de classe!
[SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Impersonate = true)]
[SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, ObjectModel = true)]
em seguida, deixe wspbuilder fazer o resto para você como ele irá criar o arquivo xml para você dentro do arquivo de manifesto!
EDITAR
O código que segue a chamada para o método de Procura será executado somente se todos os chamadores na pilha de chamada é a permissão para acessar o modelo de objeto do SharePoint.Note que esta demanda de segurança não tem nenhum impacto sobre o código que vem antes da chamada para a Demanda o método.A situação seria diferente se você fosse usar o segurança declarativa sintaxe para anotar MyMethod com o SharePointPermissionAttribute atributo de metadados:
[SharePointPermission(SecurityAction.Demand, ObjectModel=true, Unrestricted=true)]
public void MyMethod()
{
...
SPWeb site = SPContext.Current.Web;
...
}
no seu caso, a sua principal classe que contém a criar controles filho método, como um exemplo:
using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace test {
[SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Impersonate = true)]
[SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, ObjectModel = true)]
[ToolboxItemAttribute(false)]
public class VisualWebPart1 : WebPart
{
// Visual Studio might automatically update this path when you change the Visual Web Part project item.
private const string _ascxPath = @"~/_CONTROLTEMPLATES/test/VisualWebPart1UserControl.ascx";
protected override void CreateChildControls()
{
Control control = Page.LoadControl(_ascxPath);
Controls.Add(control);
}
}
}
também depende do que você deseja visível para a política?como iv anotou no bloco de comentário.O meu entendimento é apenas a classe principal que precisa de política e não de cada classe dentro do projeto!
http://msdn.microsoft.com/en-us/library/gg427711(v=office.12).aspx