Définir des autorisations de dossier pour un autre utilisateur en utilisant EWS dans Exchange

Découvrez comment définir des niveaux d’autorisation sur un dossier à l’aide de l’API managée EWS ou EWS dans Exchange.

Les autorisations au niveau du dossier permettent aux utilisateurs d’accéder à un ou plusieurs dossiers dans la boîte aux lettres d’un autre utilisateur. Les autorisations de dossier sont similaires à l’accès délégué, mais elles diffèrent des manières suivantes :

  • Les autorisations de dossier ne permettent pas à un utilisateur d'« envoyer au nom de » ou d'« envoyer en tant qu’autre utilisateur ». Ils activent uniquement l’accès aux dossiers. Les utilisateurs peuvent créer des éléments dans ces dossiers, mais ils ne peuvent pas les envoyer.

  • Vous pouvez définir des autorisations de dossier sur n’importe quel dossier de la boîte aux lettres, mais vous pouvez uniquement ajouter un délégué aux dossiers Calendrier, Contacts, Boîte de réception, Journal, Notes et Tâches.

  • Vous pouvez définir un certain nombre d’autorisations sur un dossier spécifique. Lorsque vous ajoutez un délégué, vous pouvez attribuer l’un des cinq niveaux d’autorisation.

  • Vous pouvez définir des autorisations de dossier pour les utilisateurs anonymes et par défaut. Vous pouvez uniquement accorder l’accès délégué à un compte à extension messagerie.

Si vous êtes familiarisé avec les entrées Access Control (AAC) et les listes de Access Control discrétionnaires (DACL), vous savez qu’un utilisateur ne peut avoir qu’un seul ensemble d’autorisations pour chaque dossier. Si vous essayez d’ajouter un jeu d’autorisations pour un utilisateur et qu’il dispose déjà d’un ensemble d’autorisations, vous obtenez une erreur. Lorsque vous ajoutez, supprimez ou mettez à jour des autorisations sur un dossier, vous obtenez la liste DACL actuelle, vous ajoutez ou supprimez des AIC, puis vous envoyez la liste DACL mise à jour. Vous ne pouvez pas ajouter plusieurs ACL pour le même utilisateur. Lorsque vous mettez à jour les autorisations à l’aide de l’API managée EWS, vous devez supprimer l’ace actuel de l’utilisateur, puis ajouter sa nouvelle ACE à la collection. Si vous utilisez EWS, vous remplacez simplement l’ensemble précédent d’ACL par les nouveaux.

Si vous apportez plusieurs modifications d’autorisation à un seul dossier, vous pouvez effectuer des ajouts, des suppressions ou des mises à jour par lot. Notez simplement que vous ne pouvez pas traiter par lot les mises à jour utilisateur sur plusieurs dossiers. Un appel est requis pour obtenir les autorisations sur un seul dossier, et un deuxième appel est nécessaire pour mettre à jour les autorisations sur ce dossier. Lorsque vous ajoutez, supprimez ou mettez à jour des autorisations utilisateur, vous utilisez les deux mêmes appels de méthode ou opérations pour chaque tâche.

Tableau 1. Méthodes d’API managée EWS et opérations EWS pour définir des autorisations de dossier

Si vous voulez... Utilisez cette méthode d’API gérée EWS... Utilisez cette opération EWS...
Activer, supprimer ou mettre à jour les autorisations de dossier
Folder.Bind suivi de Folder.Update
GetFolder suivi de UpdateFolder
Créer un dossier et définir des autorisations de dossier
Folder.Save
CreateFolder

Autorisations d’accès aux dossiers

Vous disposez de plusieurs options quand il s’agit de définir des autorisations de dossier sur un dossier spécifique. Vous pouvez définir un niveau d’autorisation sur un dossier pour chaque utilisateur, ce qui ajoute un ensemble d’autorisations individuelles prédéfinies à la liste dacl, ou vous pouvez définir des autorisations individuelles sur un dossier, mais vous ne pouvez pas combiner.

Les autorisations individuelles suivantes sont disponibles :

  • Peut créer
  • Peut créer des sous-dossiers
  • Est le propriétaire du dossier
  • Le dossier est-il visible ?
  • Est le contact du dossier
  • Modifier des éléments
  • Supprimer des éléments
  • Lire des éléments

En outre, les niveaux d’autorisation suivants sont disponibles, qui définissent un sous-ensemble d’autorisations et de valeurs individuelles, comme indiqué dans le tableau 2 :

  • Aucun
  • Propriétaire
  • PublishingEditor
  • Éditeur
  • PublishingAuthor
  • Auteur
  • NoneditingAuthor
  • Relecteur
  • Collaborateur
  • Personnalisé : cette valeur ne peut pas être définie par l’application. Le serveur définit cette valeur si l’application inclut une collection personnalisée d’autorisations individuelles.
  • FreeBusyTimeOnly : cette option ne peut être définie que sur les dossiers Calendrier.
  • FreeBusyTimeAndSubjectAndLocation : cette valeur ne peut être définie que sur les dossiers Calendrier.

Le tableau suivant indique les autorisations individuelles qui sont appliquées par défaut en fonction du niveau d’autorisation.

Tableau 2. Autorisations individuelles par niveau d’autorisation

Niveau d’autorisation Peut créer des éléments Peut créer des sous-dossiers Est le propriétaire du dossier Le dossier est-il visible ? Est le contact du dossier Modifier des éléments Supprimer des éléments Peut lire des éléments
Aucun
Faux
Faux
Faux
Faux
Faux
Aucun
Aucun
Aucun
Propriétaire
True
True
True
True
True
Tous
Tous
FullDetails
PublishingEditor
True
Vrai
Faux
Vrai
Faux
Tous
Tous
FullDetails
Éditeur
Vrai
Faux
Faux
Vrai
Faux
Tous
Tous
FullDetails
PublishingAuthor
True
Vrai
Faux
Vrai
Faux
Possédé
Possédé
FullDetails
Auteur
Vrai
Faux
Faux
Vrai
Faux
Possédé
Possédé
FullDetails
NoneditingAuthor
Vrai
Faux
Faux
Vrai
Faux
Aucun
Possédé
FullDetails
Relecteur
Faux
Faux
Faux
Vrai
Faux
Aucun
Aucun
FullDetails
Collaborateur
Vrai
Faux
Faux
Vrai
Faux
Aucun
Aucun
Aucun

Si vous spécifiez un niveau d’autorisation non personnalisé dans la demande d’autorisations au niveau du dossier, vous n’avez pas besoin de spécifier les paramètres d’autorisation individuels. Si vous spécifiez une autorisation individuelle lorsque vous définissez un niveau d’autorisation, une erreur ErrorInvalidPermissionSettings est retournée dans la réponse.

Ajout d’autorisations de dossier à l’aide de l’API managée EWS

L’exemple de code suivant montre comment utiliser l’API managée EWS pour :

  • Créez un objet FolderPermission pour le nouvel utilisateur.

  • Obtenez les autorisations actuelles pour un dossier à l’aide de la méthode Bind .

  • Ajoutez le nouveau FolderPermissions à la propriété Folder.Permissions .

  • Appelez la méthode Update pour enregistrer les nouvelles autorisations sur le serveur.

Cet exemple suppose que le service est un objet ExchangeService valide pour le propriétaire de la boîte aux lettres et que l’utilisateur a été authentifié auprès d’un serveur 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();
}

La ligne de code suivante spécifie le niveau d’autorisation.

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

Si vous souhaitez utiliser le niveau d’autorisation personnalisé, utilisez ce code à la place.

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

Vous pouvez définir une ou l’ensemble des propriétés FolderPermission accessibles en écriture lorsque vous créez un objet FolderPermission avec un niveau d’autorisation personnalisé. Notez toutefois que FolderPermissionLevel n’est jamais explicitement défini sur Personnalisé par l’application. FolderPermissionLevel est défini sur Personnalisé uniquement lorsque vous créez un objet FolderPermission et que vous définissez des autorisations individuelles.

Ajout d’autorisations de dossier à l’aide d’EWS

Les exemples de code EWS suivants montrent comment ajouter des autorisations à un dossier spécifique en récupérant les autorisations actuelles, puis en soumettant une liste de nouvelles autorisations.

La première étape consiste à envoyer une requête GetFolder , où la valeur DistinguishedFolderId spécifie le dossier dans lequel ajouter des autorisations (le dossier Éléments envoyés dans cet exemple) et la valeur FieldURI inclut folder:PermissionSet. Cette demande récupère les paramètres d’autorisation pour le dossier spécifié.

Il s’agit également de la requête XML que l’API managée EWS envoie lorsque vous appelez la méthode Bind pour ajouter des autorisations de dossier.

  <?xml version="1.0" encoding="utf-8"?>
  <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                 xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
                 xmlns:t="http://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>

Le serveur répond à la requête GetFolder avec un message GetFolderResponse qui inclut une valeur d’élément ResponseCodenoError, ce qui indique que le dossier a été récupéré avec succès. Les valeurs FolderId et ParentFolderId ont été raccourcies pour plus de lisibilité.

<?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="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="http://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="http://schemas.microsoft.com/exchange/services/2006/messages"
                         xmlns:t="http://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>

Ensuite, utilisez l’opération UpdateFolder pour envoyer le Jeu d’autorisations mis à jour, qui inclut l’autorisation pour le nouvel utilisateur. Notez que l’inclusion de l’élément SetFolderField pour le dossier respectif dans l’opération UpdateFolder remplacera tous les paramètres d’autorisation sur le dossier. De même, l’inclusion de l’option DeleteFolderField de l’opération UpdateFolder supprime également tous les paramètres d’autorisation sur le dossier.

Il s’agit également de la requête XML que l’API managée EWS envoie lorsque vous appelez la méthode Update pour ajouter des autorisations de dossier.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://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>

La ligne de code suivante spécifie le niveau d’autorisation.

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

Si vous souhaitez utiliser le niveau d’autorisation personnalisé, utilisez ce code à la place.

<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>

Le serveur répond à la requête UpdateFolder avec un message UpdateFolderResponse qui inclut une valeur d’élément ResponseCodeNoError, ce qui indique que le dossier a été mis à jour avec succès.

Suppression des autorisations de dossier à l’aide de l’API managée EWS

L’exemple de code suivant montre comment utiliser l’API managée EWS pour supprimer toutes les autorisations utilisateur sur un dossier spécifique, à l’exception des autorisations par défaut et anonymes, par :

  1. Obtention des autorisations actuelles pour un dossier à l’aide de la méthode Bind .

  2. Itération dans la collection Permissions et suppression d’autorisations pour des utilisateurs individuels.

  3. Appel de la méthode Update pour enregistrer les modifications.

Cet exemple supprime toutes les autorisations utilisateur sur un dossier. Si vous souhaitez modifier cet exemple pour supprimer des autorisations uniquement pour un utilisateur spécifique, modifiez la ligne de code suivante pour identifier le nom d’affichage ou l’adresse SMTP de l’utilisateur.

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

Cet exemple suppose que le service est un objet ExchangeService valide pour le propriétaire de la boîte aux lettres et que l’utilisateur a été authentifié auprès d’un serveur 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();
}

Suppression des autorisations de dossier à l’aide d’EWS

Les exemples de code EWS suivants montrent comment supprimer toutes les autorisations utilisateur sur un dossier spécifique, à l’exception des autorisations par défaut et anonymes.

Tout d’abord, envoyez une requête GetFolder où la valeur DistinguishedFolderId spécifie le dossier dans lequel supprimer les autorisations (le dossier Éléments envoyés dans cet exemple) et où la valeur FieldURI inclut folder:PermissionSet. Cette demande récupère le Jeu d’autorisations pour le dossier spécifié.

Il s’agit également de la requête XML que l’API managée EWS envoie lorsque vous appelez la méthode Bind pour supprimer les autorisations de dossier.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://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>

Le serveur répond à la requête GetFolder avec un message GetFolderResponse qui inclut une valeur d’élément ResponseCodenoError, ce qui indique que le dossier a été récupéré avec succès. Les valeurs des éléments FolderId et ParentFolderId ont été raccourcies pour plus de lisibilité.

<?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="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="http://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="http://schemas.microsoft.com/exchange/services/2006/messages"
                         xmlns:t="http://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>

Ensuite, utilisez l’opération UpdateFolder pour envoyer le Jeu d’autorisations mis à jour, qui n’inclut pas l’autorisation de l’utilisateur supprimé.

Il s’agit également de la requête XML que l’API managée EWS envoie lorsque vous appelez la méthode Update pour supprimer les autorisations de dossier.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://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>

Le serveur répond à la requête UpdateFolder avec un message UpdateFolderResponse qui inclut une valeur d’élément ResponseCodenoError, ce qui indique que la mise à jour a réussi.

Mise à jour des autorisations de dossier à l’aide de l’API managée EWS

Vous pouvez également mettre à jour les autorisations de dossier pour un dossier spécifique à l’aide de l’API managée EWS. Pour mettre à jour les autorisations :

  1. Supprimez les autorisations de dossier pour les autorisations obsolètes, mais n’appelez pas encore la méthode Update .

  2. Ajouter des autorisations de dossier pour les utilisateurs nouveaux ou modifiés.

  3. Appelez la méthode Update pour enregistrer les modifications.

Si vous essayez d’ajouter deux jeux d’autorisations pour le même utilisateur, vous recevez une erreur ServiceResponseException avec la description suivante : « Le jeu d’autorisations spécifié contient des UserIds en double ». Dans ce cas, supprimez les autorisations actuelles de la collection Permission , puis ajoutez les nouvelles autorisations à la collection Permission .

Mise à jour des autorisations de dossier à l’aide d’EWS

Vous pouvez également mettre à jour les autorisations de dossier pour des dossiers spécifiques à l’aide d’EWS en combinant le processus de suppression et d’ajout. Pour mettre à jour les autorisations :

  1. Récupérez les autorisations actuelles du dossier à l’aide de l’opération GetFolder .

  2. Envoyez une liste d’autorisations mise à jour à l’aide de l’opération UpdateFolder .

Il s’agit des deux mêmes opérations que vous utilisez pour activer ou supprimer l’accès à l’aide d’EWS. La seule différence est que lorsque vous recevez la réponse GetFolder , elle contient un jeu d’autorisations pour l’utilisateur. Remplacez simplement cet élément Permission existant par le nouvel élément Permission , puis envoyez l’opération UpdateFolder avec la ou les nouvelles valeurs d’autorisation .

Si vous essayez d’ajouter deux jeux d’autorisations pour le même utilisateur, vous recevrez la valeur ResponseCodeErrorDuplicateUserIdsSpecified. Dans ce cas, supprimez la valeur d’autorisation obsolète pour l’utilisateur de la demande, puis réessayez la demande.

Étapes suivantes

Une fois que vous avez donné à un utilisateur l’autorisation d’accéder à un dossier spécifique, l’utilisateur peut accéder au dossier en tant que délégué. Pour plus d’informations, consultez l’article suivant :

Voir aussi