Configurar permissões de pasta para outro usuário usando o EWS no Exchange

Saiba como definir níveis de permissão em uma pasta usando a API Gerenciada do EWS ou o EWS no Exchange.

As permissões no nível da pasta permitem que os usuários acessem uma ou mais pastas na caixa de correio de outro usuário. As permissões de pasta são semelhantes ao acesso de delegado, mas diferem das seguintes maneiras:

  • As permissões de pasta não permitem que um usuário "envie em nome de" ou "enviar como" outro usuário. Eles só habilitam o acesso a pastas. Os usuários podem criar itens nessas pastas, mas não podem enviá-los.

  • Você pode definir permissões de pasta em qualquer pasta na caixa de correio, mas só pode adicionar um delegado às pastas Calendário, Contatos, Caixa de Entrada, Diário, Anotações e Tarefas.

  • Você pode definir uma série de permissões em uma pasta específica. Ao adicionar um delegado, você pode atribuir um dos cinco níveis de permissão.

  • Você pode definir permissões de pasta para usuários anônimos e padrão. Você só pode conceder acesso de delegado a uma conta habilitada para email.

Se você estiver familiarizado com CONTROLE DE ACESSO Entradas (ACEs) e DACLs (Listas de Controle de Acesso Discricionárias), você sabe que um usuário só pode ter um conjunto de permissões para cada pasta. Se você tentar adicionar um conjunto de permissões para um usuário e eles já tiverem um conjunto de permissões, você receberá um erro. Quando você adiciona, remove ou atualiza permissões em uma pasta, obtém o DACL atual, adiciona ou remove as ACEs e envia o DACL atualizado. Não é possível adicionar várias ACEs para o mesmo usuário. Ao atualizar as permissões usando a API Gerenciada do EWS, você precisa remover o ACE atual do usuário e adicionar o novo ACE à coleção. Se você estiver usando o EWS, basta substituir o conjunto anterior de ACEs pelos novos.

Se você estiver fazendo várias alterações de permissão em uma única pasta, poderá fazer adições em lote, remoções ou atualizações — basta observar que você não pode fazer atualizações de usuário em lotes em várias pastas. Uma chamada é necessária para obter as permissões em uma única pasta e uma segunda chamada é necessária para atualizar as permissões nessa pasta. Ao adicionar, remover ou atualizar permissões de usuário, você usa as mesmas duas chamadas ou operações de método para cada tarefa.

Tabela 1. Métodos de API Gerenciada do EWS e operações EWS para definir permissões de pasta

Se você quiser... Use este método de API Gerenciada do EWS… Use esta operação do EWS…
Habilitar, remover ou atualizar permissões de pasta
Folder.Bind seguido por Folder.Update
GetFolder seguido por UpdateFolder
Criar uma pasta e definir permissões de pasta
Folder.Save
CreateFolder

Permissões de pastas

Você tem algumas opções quando se trata de definir permissões de pasta em uma pasta específica. Você pode definir um nível de permissão em uma pasta para cada usuário, que adiciona um conjunto de permissões individuais predefinidas à DACL ou pode definir permissões individuais em uma pasta , mas não é possível misturar e corresponder.

As seguintes permissões individuais estão disponíveis:

  • Pode criar
  • Pode criar subpastas
  • É proprietário da pasta
  • É a pasta visível
  • É contato de pasta
  • Editar itens
  • Excluir itens
  • Ler itens

Além disso, os seguintes níveis de permissão estão disponíveis, que definem um subconjunto de permissões e valores individuais, conforme mostrado na Tabela 2:

  • Nenhum
  • Proprietário
  • PublishingEditor
  • Editor
  • PublishingAuthor
  • Autor
  • NoneditingAuthor
  • Revisor
  • Colaborador
  • Personalizado – Esse valor não pode ser definido pelo aplicativo. O servidor define esse valor se o aplicativo incluir uma coleção personalizada de permissões individuais.
  • FreeBusyTimeOnly – isso só pode ser definido em pastas calendário.
  • FreeBusyTimeAndSubjectAndLocation – isso só pode ser definido em pastas calendário.

A tabela a seguir mostra quais permissões individuais são aplicadas por padrão com base no nível de permissão.

Tabela 2. Permissões individuais por nível de permissão

Nível da permissão Pode criar itens Pode criar subpastas É proprietário da pasta É a pasta visível É contato de pasta Editar itens Excluir itens Pode ler itens
Nenhum
Falso
Falso
Falso
Falso
Falso
Nenhum
Nenhum
Nenhum
Proprietário
Verdadeiro
Verdadeiro
Verdadeiro
Verdadeiro
Verdadeiro
Todos
Todos
FullDetails
PublishingEditor
Verdadeiro
Verdadeiro
Falso
Verdadeiro
Falso
Todos
Todos
FullDetails
Editor
Verdadeiro
Falso
Falso
Verdadeiro
Falso
Todos
Todos
FullDetails
PublishingAuthor
Verdadeiro
Verdadeiro
Falso
Verdadeiro
Falso
Propriedade
Propriedade
FullDetails
Autor
Verdadeiro
Falso
Falso
Verdadeiro
Falso
Propriedade
Propriedade
FullDetails
NoneditingAuthor
Verdadeiro
Falso
Falso
Verdadeiro
Falso
Nenhum
Propriedade
FullDetails
Revisor
Falso
Falso
Falso
Verdadeiro
Falso
Nenhum
Nenhum
FullDetails
Colaborador
Verdadeiro
Falso
Falso
Verdadeiro
Falso
Nenhum
Nenhum
Nenhum

Se você especificar um nível de permissão não personalizado na solicitação de permissões no nível da pasta, não precisará especificar as configurações de permissão individuais. Se você especificar uma permissão individual ao definir um nível de permissão, um erro ErrorInvalidPermissionSettings será retornado na resposta.

Adicionando permissões de pasta usando a API Gerenciada do EWS

O exemplo de código a seguir mostra como usar a API Gerenciada do EWS para:

  • Crie um novo objeto FolderPermission para o novo usuário.

  • Obtenha as permissões atuais de uma pasta usando o método Bind .

  • Adicione as novas PastasPermissões à propriedade Folder.Permissions .

  • Chame o método Update para salvar as novas permissões para o servidor.

Este exemplo pressupõe que o serviço seja um objeto ExchangeService válido para o proprietário da caixa de correio e que o usuário tenha sido autenticado em um servidor exchange.

static void EnableFolderPermissions(ExchangeService service)
{
    // Create a property set to use for folder binding.
    PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, FolderSchema.Permissions);
    // Specify the SMTP address of the new user and the folder permissions level.
    FolderPermission fldperm = new FolderPermission("sadie@contoso.com", FolderPermissionLevel.Editor);
    
    // Bind to the folder and get the current permissions. 
    // This call results in a GetFolder call to EWS.
    Folder sentItemsFolder = Folder.Bind(service, WellKnownFolderName.SentItems, propSet);
 
    // Add the permissions for the new user to the Sent Items DACL.
    sentItemsFolder.Permissions.Add(fldperm);
    // This call results in a UpdateFolder call to EWS.
    sentItemsFolder.Update();
}

A linha de código a seguir especifica o nível de permissão.

    FolderPermission fldperm = new FolderPermission("sadie@contoso.com", FolderPermissionLevel.Editor);

Se você quiser usar o nível de permissão personalizado, use esse código.

FolderPermission fldperm = new FolderPermission();
fldperm.UserId = "sadie@Contoso1000.onmicrosoft.com";
fldperm.CanCreateItems = true;
fldperm.CanCreateSubFolders = true;
…

Você pode definir qualquer ou todas as propriedades de FolderPermission graváveis ao criar um objeto FolderPermission com um nível de permissão personalizado. Observe, no entanto, que o FolderPermissionLevel nunca é definido explicitamente como Personalizado pelo aplicativo. O FolderPermissionLevel é definido como Personalizado somente quando você cria um objeto FolderPermission e define permissões individuais.

Adicionando permissões de pasta usando o EWS

Os exemplos de código EWS a seguir mostram como adicionar permissões a uma pasta específica recuperando as permissões atuais e enviando uma lista de novas permissões.

A primeira etapa é enviar uma solicitação GetFolder , em que o valor DistinguishedFolderId especifica a pasta na qual adicionar permissões (a pasta Itens Enviados neste exemplo) e o valor FieldURI inclui pasta:PermissionSet. Essa solicitação recuperará as configurações de permissão da pasta especificada.

Essa também é a solicitação XML que a API Gerenciada do EWS envia quando você chama o método Bind para adicionar permissões de pasta.

  <?xml version="1.0" encoding="utf-8"?>
  <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                 xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" 
                 xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types" 
                 xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
      <t:RequestServerVersion Version="Exchange2007_SP1" />
    </soap:Header>
    <soap:Body>
      <m:GetFolder>
        <m:FolderShape>
          <t:BaseShape>IdOnly</t:BaseShape>
          <t:AdditionalProperties>
            <t:FieldURI FieldURI="folder:PermissionSet" />
          </t:AdditionalProperties>
        </m:FolderShape>
        <m:FolderIds>
          <t:DistinguishedFolderId Id="sentitems" />
        </m:FolderIds>
      </m:GetFolder>
    </soap:Body>
  </soap:Envelope>

O servidor responde à solicitação GetFolder com uma mensagem GetFolderResponse que inclui um valor de elemento ResponseCode de NoError, que indica que a pasta foi recuperada com êxito. Os valores FolderId e ParentFolderId foram abreviados para legibilidade.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="893"
                         MinorBuildNumber="17"
                         Version="V2_10"
                         xmlns:h="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:GetFolderResponse xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
                         xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:GetFolderResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Folders>
            <t:Folder>
              <t:FolderId Id="CgAAAA=="
                          ChangeKey="AQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiRd1" />
              <t:PermissionSet>
                <t:Permissions>
                  <t:Permission>
                    <t:UserId>
                      <t:DistinguishedUser>Default</t:DistinguishedUser>
                    </t:UserId>
                    <t:CanCreateItems>false</t:CanCreateItems>
                    <t:CanCreateSubFolders>false</t:CanCreateSubFolders>
                    <t:IsFolderOwner>false</t:IsFolderOwner>
                    <t:IsFolderVisible>false</t:IsFolderVisible>
                    <t:IsFolderContact>false</t:IsFolderContact>
                    <t:EditItems>None</t:EditItems>
                    <t:DeleteItems>None</t:DeleteItems>
                    <t:ReadItems>None</t:ReadItems>
                    <t:PermissionLevel>None</t:PermissionLevel>
                  </t:Permission>
                  <t:Permission>
                    <t:UserId>
                      <t:DistinguishedUser>Anonymous</t:DistinguishedUser>
                    </t:UserId>
                    <t:CanCreateItems>false</t:CanCreateItems>
                    <t:CanCreateSubFolders>false</t:CanCreateSubFolders>
                    <t:IsFolderOwner>false</t:IsFolderOwner>
                    <t:IsFolderVisible>false</t:IsFolderVisible>
                    <t:IsFolderContact>false</t:IsFolderContact>
                    <t:EditItems>None</t:EditItems>
                    <t:DeleteItems>None</t:DeleteItems>
                    <t:ReadItems>None</t:ReadItems>
                    <t:PermissionLevel>None</t:PermissionLevel>
                  </t:Permission>
                </t:Permissions>
              </t:PermissionSet>
            </t:Folder>
          </m:Folders>
        </m:GetFolderResponseMessage>
      </m:ResponseMessages>
    </m:GetFolderResponse>
  </s:Body>
</s:Envelope>

Em seguida, use a operação UpdateFolder para enviar o Conjunto de Permissões atualizado, que inclui a Permissão para o novo usuário. Observe que incluir o elemento SetFolderField para a respectiva pasta na operação UpdateFolder substituirá todas as configurações de permissão na pasta. Da mesma forma, incluindo a opção DeleteFolderField da operação UpdateFolder também excluirá todas as configurações de permissão na pasta.

Essa também é a solicitação XML que a API Gerenciada do EWS envia quando você chama o método Update para adicionar permissões de pasta.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
  </soap:Header>
  <soap:Body>
    <m:UpdateFolder>
      <m:FolderChanges>
        <t:FolderChange>
          <t:FolderId Id="CgAAAA=="
                      ChangeKey="AQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiRd1" />
          <t:Updates>
            <t:SetFolderField>
              <t:FieldURI FieldURI="folder:PermissionSet" />
              <t:Folder>
                <t:PermissionSet>
                  <t:Permissions>
                    <t:Permission>
                      <t:UserId>
                        <t:DistinguishedUser>Default</t:DistinguishedUser>
                      </t:UserId>
                      <t:PermissionLevel>None</t:PermissionLevel>
                    </t:Permission>
                    <t:Permission>
                      <t:UserId>
                        <t:DistinguishedUser>Anonymous</t:DistinguishedUser>
                      </t:UserId>
                      <t:PermissionLevel>None</t:PermissionLevel>
                    </t:Permission>
                    <t:Permission>
                      <t:UserId>
                        <t:PrimarySmtpAddress>sadie@contoso.com</t:PrimarySmtpAddress>
                      </t:UserId>
                      <t:PermissionLevel>Editor</t:PermissionLevel>
                    </t:Permission>
                  </t:Permissions>
                </t:PermissionSet>
              </t:Folder>
            </t:SetFolderField>
          </t:Updates>
        </t:FolderChange>
      </m:FolderChanges>
    </m:UpdateFolder>
  </soap:Body>
</soap:Envelope>

A linha de código a seguir especifica o nível de permissão.

<t:Permission>
    <t:UserId>
        <t:PrimarySmtpAddress>sadie@contoso.com</t:PrimarySmtpAddress>
    </t:UserId>
    <t:PermissionLevel>Editor</t:PermissionLevel>
</t:Permission>

Se você quiser usar o nível de permissão personalizado, use esse código.

<t:Permission>
    <t:UserId>
        <t:PrimarySmtpAddress> sadie@contoso.com </t:PrimarySmtpAddress>
    </t:UserId>
    <t:CanCreateItems>true</t:CanCreateItems>
    <t:CanCreateSubFolders>true</t:CanCreateSubFolders>
    <t:IsFolderOwner>false</t:IsFolderOwner>
    <t:IsFolderVisible>false</t:IsFolderVisible>
    <t:IsFolderContact>false</t:IsFolderContact>
    <t:EditItems>None</t:EditItems>
    <t:DeleteItems>None</t:DeleteItems>
    <t:ReadItems>None</t:ReadItems>
    <t:PermissionLevel>Custom</t:PermissionLevel>
</t:Permission>

O servidor responde à solicitação UpdateFolder com uma mensagem UpdateFolderResponse que inclui um valor de elemento ResponseCode de NoError, o que indica que a pasta foi atualizada com êxito.

Removendo permissões de pasta usando a API Gerenciada do EWS

O exemplo de código a seguir mostra como usar a API Gerenciada do EWS para remover todas as permissões de usuário em uma pasta específica, exceto para as permissões padrão e anônima, por:

  1. Obtendo as permissões atuais para uma pasta usando o método Bind .

  2. Iterando por meio da coleção Permissões e removendo permissões para usuários individuais.

  3. Chamando o método Update para salvar as alterações.

Este exemplo remove todas as permissões de usuário em uma pasta. Se você quiser modificar este exemplo para remover permissões apenas para um usuário específico, altere a linha de código a seguir para identificar o nome de exibição ou o endereço SMTP do usuário.

if (sentItemsFolder.Permissions[t].UserId.DisplayName != null || sentItemsFolder.Permissions[t].UserId.PrimarySmtpAddress != null)

Este exemplo pressupõe que o serviço seja um objeto ExchangeService válido para o proprietário da caixa de correio e que o usuário tenha sido autenticado em um servidor exchange.

static void RemoveFolderPermissions(ExchangeService service)
{
    // Create a property set to use for folder binding.
    PropertySet propSet = new PropertySet(BasePropertySet.FirstClassProperties, FolderSchema.Permissions);
    // Bind to the folder and get the current permissions. 
    // This call results in a GetFolder call to EWS.
    Folder sentItemsFolder = Folder.Bind(service, new FolderId(WellKnownFolderName.SentItems, "primary@contoso.com"), propSet);
    // Iterate through the collection of permissions and remove permissions for any 
    // user with a display name or SMTP address. This leaves the anonymous and 
    // default user permissions unchanged. 
    if (sentItemsFolder.Permissions.Count != 0)
    {
        for (int t = 0; t < sentItemsFolder.Permissions.Count; t++)
        {
            // Find any permissions associated with the specified user and remove them from the DACL
            if (sentItemsFolder.Permissions[t].UserId.DisplayName != null || sentItemsFolder.Permissions[t].UserId.PrimarySmtpAddress != null)
            {
                sentItemsFolder.Permissions.Remove(sentItemsFolder.Permissions[t]);
            }
        }
    }
    // This call results in an UpdateFolder call to EWS.
    sentItemsFolder.Update();
}

Removendo permissões de pasta usando o EWS

Os exemplos de código EWS a seguir mostram como remover todas as permissões de usuário em uma pasta específica, exceto as permissões padrão e anônimas.

Primeiro, envie uma solicitação GetFolder em que o valor DistinguishedFolderId especifica a pasta na qual remover permissões (a pasta Itens Enviados neste exemplo) e o valor FieldURI inclui pasta:PermissionSet. Essa solicitação recuperará o Conjunto de Permissões para a pasta especificada.

Essa também é a solicitação XML que a API Gerenciada do EWS envia quando você chama o método Bind para remover permissões de pasta.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
  </soap:Header>
  <soap:Body>
    <m:GetFolder>
      <m:FolderShape>
        <t:BaseShape>AllProperties</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="folder:PermissionSet" />
        </t:AdditionalProperties>
      </m:FolderShape>
      <m:FolderIds>
        <t:DistinguishedFolderId Id="drafts">
          <t:Mailbox>
            <t:EmailAddress>primary@contoso.com</t:EmailAddress>
          </t:Mailbox>
        </t:DistinguishedFolderId>
      </m:FolderIds>
    </m:GetFolder>
  </soap:Body>
</soap:Envelope>

O servidor responde à solicitação GetFolder com uma mensagem GetFolderResponse que inclui um valor de elemento ResponseCode de NoError, que indica que a pasta foi recuperada com êxito. Os valores dos elementos FolderId e ParentFolderId foram abreviados para legibilidade.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="893"
                         MinorBuildNumber="17"
                         Version="V2_10"
                         xmlns:h="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:GetFolderResponse xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
                         xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:GetFolderResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Folders>
            <t:Folder>
              <t:FolderId Id="EAAAAA=="
                          ChangeKey="AQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiRd5" />
              <t:ParentFolderId Id="CQAAAA=="
                                ChangeKey="AQAAAA==" />
              <t:FolderClass>IPF.Note</t:FolderClass>
              <t:DisplayName>Drafts</t:DisplayName>
              <t:TotalCount>0</t:TotalCount>
              <t:ChildFolderCount>0</t:ChildFolderCount>
              <t:EffectiveRights>
                <t:CreateAssociated>true</t:CreateAssociated>
                <t:CreateContents>true</t:CreateContents>
                <t:CreateHierarchy>true</t:CreateHierarchy>
                <t:Delete>true</t:Delete>
                <t:Modify>true</t:Modify>
                <t:Read>true</t:Read>
                <t:ViewPrivateItems>true</t:ViewPrivateItems>
              </t:EffectiveRights>
              <t:PermissionSet>
                <t:Permissions>
                  <t:Permission>
                    <t:UserId>
                      <t:DistinguishedUser>Default</t:DistinguishedUser>
                    </t:UserId>
                    <t:CanCreateItems>false</t:CanCreateItems>
                    <t:CanCreateSubFolders>false</t:CanCreateSubFolders>
                    <t:IsFolderOwner>false</t:IsFolderOwner>
                    <t:IsFolderVisible>false</t:IsFolderVisible>
                    <t:IsFolderContact>false</t:IsFolderContact>
                    <t:EditItems>None</t:EditItems>
                    <t:DeleteItems>None</t:DeleteItems>
                    <t:ReadItems>None</t:ReadItems>
                    <t:PermissionLevel>None</t:PermissionLevel>
                  </t:Permission>
                  <t:Permission>
                    <t:UserId>
                      <t:DistinguishedUser>Anonymous</t:DistinguishedUser>
                    </t:UserId>
                    <t:CanCreateItems>false</t:CanCreateItems>
                    <t:CanCreateSubFolders>false</t:CanCreateSubFolders>
                    <t:IsFolderOwner>false</t:IsFolderOwner>
                    <t:IsFolderVisible>false</t:IsFolderVisible>
                    <t:IsFolderContact>false</t:IsFolderContact>
                    <t:EditItems>None</t:EditItems>
                    <t:DeleteItems>None</t:DeleteItems>
                    <t:ReadItems>None</t:ReadItems>
                    <t:PermissionLevel>None</t:PermissionLevel>
                  </t:Permission>
                  <t:Permission>
                    <t:UserId>
                      <t:SID>S-1-5-21-1337771579-694202782-848329751-1535223</t:SID>
                      <t:PrimarySmtpAddress>sadie@Contoso.com</t:PrimarySmtpAddress>
                      <t:DisplayName>Sadie Daniels</t:DisplayName>
                    </t:UserId>
                    <t:CanCreateItems>true</t:CanCreateItems>
                    <t:CanCreateSubFolders>false</t:CanCreateSubFolders>
                    <t:IsFolderOwner>false</t:IsFolderOwner>
                    <t:IsFolderVisible>true</t:IsFolderVisible>
                    <t:IsFolderContact>false</t:IsFolderContact>
                    <t:EditItems>All</t:EditItems>
                    <t:DeleteItems>All</t:DeleteItems>
                    <t:ReadItems>FullDetails</t:ReadItems>
                    <t:PermissionLevel>Editor</t:PermissionLevel>
                  </t:Permission>
                </t:Permissions>
              </t:PermissionSet>
              <t:UnreadCount>0</t:UnreadCount>
            </t:Folder>
          </m:Folders>
        </m:GetFolderResponseMessage>
      </m:ResponseMessages>
    </m:GetFolderResponse>
  </s:Body>
</s:Envelope>

Em seguida, use a operação UpdateFolder para enviar o Conjunto de Permissões atualizado, que não inclui a Permissão para o usuário removido.

Essa também é a solicitação XML que a API Gerenciada do EWS envia quando você chama o método Update para remover permissões de pasta.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
  </soap:Header>
  <soap:Body>
    <m:UpdateFolder>
      <m:FolderChanges>
        <t:FolderChange>
          <t:FolderId Id="EAAAAA=="
                      ChangeKey="AQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiRd5" />
          <t:Updates>
            <t:SetFolderField>
              <t:FieldURI FieldURI="folder:PermissionSet" />
              <t:Folder>
                <t:PermissionSet>
                  <t:Permissions>
                    <t:Permission>
                      <t:UserId>
                        <t:DistinguishedUser>Default</t:DistinguishedUser>
                      </t:UserId>
                      <t:PermissionLevel>None</t:PermissionLevel>
                    </t:Permission>
                    <t:Permission>
                      <t:UserId>
                        <t:DistinguishedUser>Anonymous</t:DistinguishedUser>
                      </t:UserId>
                      <t:PermissionLevel>None</t:PermissionLevel>
                    </t:Permission>
                  </t:Permissions>
                </t:PermissionSet>
              </t:Folder>
            </t:SetFolderField>
          </t:Updates>
        </t:FolderChange>
      </m:FolderChanges>
    </m:UpdateFolder>
  </soap:Body>
</soap:Envelope>

O servidor responde à solicitação UpdateFolder com uma mensagem UpdateFolderResponse que inclui um valor de elemento ResponseCode do NoError, o que indica que a atualização foi bem-sucedida.

Atualizando permissões de pasta usando a API Gerenciada do EWS

Você também pode atualizar permissões de pasta para uma pasta específica usando a API Gerenciada do EWS. Para atualizar as permissões:

  1. Remova as permissões de pasta para as permissões desatualizadas, mas não chame o método Update (ainda).

  2. Adicione permissões de pasta para os usuários novos ou alterados.

  3. Chame o método Update para salvar as alterações.

Se você tentar adicionar dois conjuntos de permissões para o mesmo usuário, receberá um erro ServiceResponseException com a seguinte descrição: "O conjunto de permissões especificado contém UserIds duplicados". Nesse caso, remova as permissões atuais da coleção Permission e adicione as novas permissões à coleção Permission .

Atualizando permissões de pasta usando o EWS

Você também pode atualizar permissões de pasta para pastas específicas usando o EWS combinando o processo de remoção e adição. Para atualizar as permissões:

  1. Recupere as permissões atuais da pasta usando a operação GetFolder .

  2. Envie uma lista atualizada de permissões usando a operação UpdateFolder .

Estas são as mesmas duas operações que você usa para habilitar ou remover o acesso usando o EWS. A única diferença é que, quando você receber a resposta GetFolder , ela conterá um conjunto de permissões para o usuário. Basta substituir esse elemento permissão existente pelo novo elemento Permission e, em seguida, enviar a operação UpdateFolder pelo novo valor ou valores de permissão .

Se você tentar adicionar dois conjuntos de permissões para o mesmo usuário, receberá um valor ResponseCode de ErrorDuplicateUserIdsSpecified. Nesse caso, remova o valor de permissão desatualizado para o usuário da solicitação e tente novamente a solicitação.

Próximas etapas

Depois de dar permissão de usuário a uma pasta específica, o usuário poderá acessar a pasta como delegado. Para saber mais, veja:

Confira também