Définir les autorisations de dossier pour un autre utilisateur à l’aide d’EWS dans ExchangeSet folder permissions for another user by using EWS in Exchange

Découvrez comment définir des niveaux d’autorisation sur un dossier à l’aide de l’API managée EWS ou d’EWS dans Exchange.Learn how to set permission levels on a folder by using the EWS Managed API or EWS in 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.Folder-level permissions enable users to access one or more folders in another user's mailbox. Les autorisations de dossier sont semblables à l’accès délégué, mais elles diffèrent de la façon suivante :Folder permissions are similar to delegate access, but they differ in the following ways:

  • Les autorisations de dossier ne permettent pas à un utilisateur de « envoyer de la part de » ou « envoyer en tant que » un autre utilisateur.Folder permissions do not enable a user to "send on behalf of" or "send as" another user. Ils autorisent uniquement l’accès aux dossiers.They only enable access to folders. Les utilisateurs peuvent créer des éléments dans ces dossiers, mais ils ne peuvent pas les envoyer.Users can create items in those folders, but they can't send them.

  • Vous pouvez définir des autorisations de dossier sur n’importe quel dossier de la boîte aux lettres, mais vous ne pouvez ajouter un délégué qu’aux dossiers calendrier, contacts, boîte de réception, Journal, notes et tâches.You can set folder permissions on any folder in the mailbox, but you can only add a delegate to the Calendar, Contacts, Inbox, Journal, Notes, and Tasks folders.

  • Vous pouvez définir un certain nombre d' autorisations sur un dossier spécifique.You can set a number of permissions on a specific folder. Lorsque vous ajoutez un délégué, vous pouvez affecter l’un des cinq niveaux d’autorisationseulement.When you add a delegate, you can assign one of only five permission levels.

  • Vous pouvez définir des autorisations de dossier pour les utilisateurs anonymes et par défaut.You can set folder permissions for anonymous and default users. Vous pouvez uniquement accorder l’accès délégué à un compte à extension messagerie.You can only grant delegate access to a mail-enabled account.

Si vous êtes familiarisé avec les entrées de contrôle d’accès (ACE) et les listes de contrôle d’accès discrétionnaire (DACL), vous savez qu’un utilisateur ne peut avoir qu’un seul ensemble d’autorisations pour chaque dossier.If you're familiar with Access Control Entries (ACEs) and Discretionary Access Control Lists (DACLs), you know that a user can only have one set of permissions for each folder. Si vous essayez d’ajouter un jeu d’autorisations pour un utilisateur et qu’ils disposent déjà d’un ensemble d’autorisations, vous obtiendrez une erreur.If you try to add a set of permissions for a user and they already have a set of permissions, you'll get an error. Lorsque vous ajoutez, supprimez ou mettez à jour des autorisations sur un dossier, vous obtenez la liste DACL actuelle, ajoutez ou supprimez des ACE, puis envoyez la liste DACL mise à jour.When you add, remove, or update permissions on a folder, you get the current DACL, add or remove any ACEs, and then send the updated DACL. Vous ne pouvez pas ajouter plusieurs ACE pour le même utilisateur.You cannot add multiple ACEs for the same user. Lorsque vous mettez à jour les autorisations à l’aide de l’API managée EWS, vous devez supprimer l’ACE actuelle de l’utilisateur, puis ajouter sa nouvelle ACE à la collection.When you update permissions by using the EWS Managed API, you need to remove the user's current ACE and then add their new ACE to the collection. Si vous utilisez EWS, il vous suffit de remplacer le jeu d’ACE précédent par le nouveau.If you're using EWS, you just replace the previous set of ACEs with the new ones.

Si vous apportez plusieurs modifications d’autorisations à un seul dossier, vous pouvez effectuer des ajouts, des suppressions ou des mises à jour par lot, mais notez simplement que vous ne pouvez pas effectuer de mises à jour par lots sur plusieurs dossiers.If you're making multiple permission changes to a single folder, you can batch additions, removals, or updates —just note that you cannot batch user updates on multiple folders. Un appel est nécessaire pour obtenir les autorisations sur un seul dossier, et un deuxième appel est nécessaire pour mettre à jour les autorisations sur ce dossier.One call is required to get the permissions on a single folder, and a second call is required to update the permissions on that folder. Lorsque vous ajoutez, supprimez ou mettez à jour des autorisations utilisateur, vous utilisez les deux mêmes appels ou opérations de méthode pour chaque tâche.When you add, remove, or update user permissions, you use the same two method calls or operations for each task.

Tableau 1. Méthodes de l’API managée EWS et opérations EWS pour la définition des autorisations de dossierTable 1. EWS Managed API methods and EWS operations for setting folder permissions

Si vous souhaitez...If you want to… Utilisez cette méthode d’API managée EWS...Use this EWS Managed API method… Utilisez cette opération EWS...Use this EWS operation…
Activer, supprimer ou mettre à jour les autorisations de dossierEnable, remove, or update folder permissions
Folder. bind suivi de Folder. UpdateFolder.Bind followed by Folder.Update
GetFolder suivi par UpdateFolderGetFolder followed by UpdateFolder
Création d’un dossier et définition des autorisations de dossierCreate a folder and define folder permissions
Folder. SaveFolder.Save
CreateFolderCreateFolder

Autorisations d’accès aux dossiersFolder permissions

Vous disposez de plusieurs options pour définir des autorisations de dossier sur un dossier spécifique.You have quite a few options when it comes to setting folder permissions on a specific folder. 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 mélanger et faire correspondre.You can set a permission level on a folder for each user, which adds a set of predefined individual permissions to the DACL, or you can set individual permissions on a folder — but you can't mix and match.

Les autorisations individuelles suivantes sont disponibles :The following individual permissions are available:

  • Pouvez créerCan create
  • Possibilité de créer des sous-dossiersCan create subfolders
  • Est le propriétaire du dossierIs folder owner
  • Le dossier est-il visibleIs folder visible
  • Est le contact du dossierIs folder contact
  • Modifier des élémentsEdit items
  • Supprimer des élémentsDelete items
  • Lire des élémentsRead items

En outre, les niveaux d’autorisation suivants sont disponibles, qui définissent un sous-ensemble des autorisations et des valeurs individuelles, comme indiqué dans le tableau 2 :In addition, the following permission levels are available, which define a subset of individual permissions and values, as shown in Table 2:

  • AucuneNone
  • PropriétaireOwner
  • PublishingEditorPublishingEditor
  • ÉditeurEditor
  • PublishingAuthorPublishingAuthor
  • AuteurAuthor
  • NoneditingauthorcreateitemsNoneditingAuthor
  • RelecteurReviewer
  • CollaborateurContributor
  • Custom : cette valeur ne peut pas être définie par l’application.Custom - This value cannot be set by the application. Le serveur définit cette valeur si l’application inclut une collection personnalisée d’autorisations individuelles.The server sets this value if the application includes a custom collection of individual permissions.
  • FreeBusyTimeOnly-cette valeur ne peut être définie que sur les dossiers de calendrier.FreeBusyTimeOnly - This can only be set on Calendar folders.
  • FreeBusyTimeAndSubjectAndLocation-cette valeur ne peut être définie que sur les dossiers de calendrier.FreeBusyTimeAndSubjectAndLocation - This can only be set on Calendar folders.

Le tableau suivant indique les autorisations individuelles qui sont appliquées par défaut en fonction du niveau d’autorisation.The following table shows which individual permissions are applied by default based on permission level.

Tableau 2. Autorisations individuelles par niveau d’autorisationTable 2. Individual permissions by permission level

Niveau d’autorisationPermission level Peut créer des élémentsCan create items Possibilité de créer des sous-dossiersCan create sub folders Est le propriétaire du dossierIs folder owner Le dossier est-il visibleIs folder visible Est le contact du dossierIs folder contact Modifier des élémentsEdit items Supprimer des élémentsDelete items Peut lire des élémentsCan read items
AucuneNone
FauxFalse
FauxFalse
FauxFalse
FauxFalse
FauxFalse
AucunNone
AucunNone
AucunNone
PropriétaireOwner
TrueTrue
TrueTrue
TrueTrue
TrueTrue
TrueTrue
TousAll
TousAll
FullDetailsFullDetails
PublishingEditorPublishingEditor
TrueTrue
TrueTrue
FalseFalse
VraiTrue
FauxFalse
TousAll
TousAll
FullDetailsFullDetails
ÉditeurEditor
VraiTrue
FauxFalse
FalseFalse
VraiTrue
FauxFalse
TousAll
TousAll
FullDetailsFullDetails
PublishingAuthorPublishingAuthor
TrueTrue
TrueTrue
FalseFalse
VraiTrue
FauxFalse
AppartienOwned
AppartienOwned
FullDetailsFullDetails
AuteurAuthor
VraiTrue
FauxFalse
FalseFalse
VraiTrue
FauxFalse
AppartienOwned
AppartienOwned
FullDetailsFullDetails
NoneditingauthorcreateitemsNoneditingAuthor
VraiTrue
FauxFalse
FalseFalse
VraiTrue
FauxFalse
AucuneNone
AppartienOwned
FullDetailsFullDetails
RelecteurReviewer
FauxFalse
FauxFalse
FalseFalse
VraiTrue
FauxFalse
AucunNone
AucunNone
FullDetailsFullDetails
CollaborateurContributor
VraiTrue
FauxFalse
FalseFalse
VraiTrue
FauxFalse
AucunNone
AucunNone
AucunNone

Si vous spécifiez un niveau d’autorisation non personnalisé dans la demande d’autorisations au niveau du dossier, il n’est pas nécessaire de spécifier les paramètres d’autorisation individuels.If you specify a non-custom permission level in the folder-level permissions request, you don't need to specify the individual permission settings. Si vous spécifiez une autorisation individuelle lorsque vous définissez un niveau d’autorisation, une erreur ErrorInvalidPermissionSettings est renvoyée dans la réponse.If you do specify an individual permission when you set a permission level, an ErrorInvalidPermissionSettings error will be returned in the response.

Ajout d’autorisations de dossier à l’aide de l’API managée EWSAdding folder permissions by using the EWS Managed API

L’exemple de code suivant montre comment utiliser l’API managée EWS pour :The following code example shows how to use the EWS Managed API to:

  • Créez un objet FolderPermission pour le nouvel utilisateur.Create a new FolderPermission object for the new user.

  • Obtenir les autorisations actuelles d’un dossier à l’aide de la méthode Bind .Get the current permissions for a folder by using the Bind method.

  • Ajoutez la nouvelle FolderPermissions à la propriété Folder. Permissions .Add the new FolderPermissions to the Folder.Permissions property.

  • Appelez la méthode Update pour enregistrer les nouvelles autorisations sur le serveur.Call the Update method to save the new permissions to the server.

Cet exemple part du principe 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.This example assumes that service is a valid ExchangeService object for the mailbox owner and that the user has been authenticated to an Exchange server.

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.The following line of code specifies the permission level.

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

Si vous souhaitez utiliser le niveau d’autorisation personnalisé, utilisez ce code à la place.If you want to use the custom permission level, use this code instead.

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

Vous pouvez définir une ou toutes les Propriétés FolderPermission accessibles en écriture lorsque vous créez un objet FolderPermission avec un niveau d’autorisation personnalisé.You can set any or all of the writable FolderPermission properties when you create a FolderPermission object with a custom permission level. Notez toutefois que l' FolderPermissionLevel n’est jamais définie explicitement sur Custom par l’application.Note, however, that the FolderPermissionLevel is never explicitly set to Custom by the application. Le FolderPermissionLevel est défini sur personnalisé uniquement lorsque vous créez un objet FolderPermission et que vous définissez des autorisations individuelles.The FolderPermissionLevel is set to Custom only when you create a FolderPermission object and set individual permissions.

Ajout d’autorisations de dossier à l’aide d’EWSAdding folder permissions by using EWS

Les exemples de code EWS suivants montrent comment ajouter des autorisations à un dossier spécifique en extrayant les autorisations actuelles, puis en soumettant une liste de nouvelles autorisations.The following EWS code examples show how to add permissions to a specific folder by retrieving the current permissions and then submitting a list of new permissions.

La première étape consiste à envoyer une demande GetFolder , dans laquelle 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 dossier : PermissionSet.The first step is to send a GetFolder request, where the DistinguishedFolderId value specifies the folder in which to add permissions (the Sent Items folder in this example) and the FieldURI value includes folder:PermissionSet. Cette requête récupère les paramètres d’autorisation pour le dossier spécifié.This request will retrieve the permission settings for the folder specified.

Il s’agit également de la demande XML que l’API managée EWS envoie lorsque vous appelez la méthode Bind pour Ajouter des autorisations de dossier.This is also the XML request that the EWS Managed API sends when you call the Bind method to add folder permissions.

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

Le serveur répond à la demande GetFolder avec un message GetFolderResponse qui inclut la valeur d’élément ResponseCode NOERROR, ce qui indique que le dossier a été récupéré.The server responds to the GetFolder request with a GetFolderResponse message that includes a ResponseCode element value of NoError, which indicates that the folder was retrieved successfully. Les valeurs FolderId et ParentFolderId ont été raccourcies pour des raisons de lisibilité.The FolderId and ParentFolderId values have been shortened for readability.

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

Ensuite, utilisez l’opération UpdateFolder pour envoyer le PermissionSetmis à jour, ce qui inclut l' autorisation pour le nouvel utilisateur.Next, use the UpdateFolder operation to send the updated PermissionSet, which includes the Permission for the new user. Notez que l’inclusion de l’élément SetFolderField pour le dossier respectif dans l’opération UpdateFolder remplace tous les paramètres d’autorisation sur le dossier.Note that including the SetFolderField element for the respective folder in the UpdateFolder operation will overwrite all the permission settings on the folder. De même, l’option DeleteFolderField de l’opération UpdateFolder supprimera également tous les paramètres d’autorisation sur le dossier.Likewise, including the DeleteFolderField option of the UpdateFolder operation will also delete all the permission settings on the folder.

Il s’agit également de la demande XML que l’API managée EWS envoie lorsque vous appelez la méthode Update pour Ajouter des autorisations de dossier.This is also the XML request that the EWS Managed API sends when you call the Update method to add folder permissions.

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

La ligne de code suivante spécifie le niveau d’autorisation.The following line of code specifies the permission level.

<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.If you want to use the custom permission level, use this code instead.

<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 demande UpdateFolder avec un message UpdateFolderResponse qui inclut une valeur d’élément ResponseCode de NOERROR, ce qui indique que le dossier a été mis à jour.The server responds to the UpdateFolder request with an UpdateFolderResponse message that includes a ResponseCode element value of NoError, which indicates that the folder was updated successfully.

Suppression des autorisations de dossier à l’aide de l’API managée EWSRemoving folder permissions by using the EWS Managed API

L’exemple de code suivant montre comment utiliser l’API managée EWS pour supprimer toutes les autorisations utilisateur d’un dossier spécifique, à l’exception des autorisations par défaut et anonymes, de la manière suivante :The following code example shows how to use the EWS Managed API to remove all user permissions on a specific folder, except for the default and anonymous permissions, by:

  1. Obtention des autorisations actuelles pour un dossier à l’aide de la méthode Bind .Getting the current permissions for a folder by using the Bind method.

  2. Itérer au sein de la collection d' autorisations et supprimer des autorisations pour des utilisateurs individuels.Iterating through the Permissions collection and removing permissions for individual users.

  3. Appel de la méthode Update pour enregistrer les modifications.Calling the Update method to save the changes.

Cet exemple montre comment supprimer toutes les autorisations utilisateur sur un dossier.This example removes all user permissions on a folder. Si vous souhaitez modifier cet exemple afin de supprimer uniquement les autorisations d’un utilisateur spécifique, modifiez la ligne de code suivante pour identifier le nom complet ou l’adresse SMTP de l’utilisateur.If you want to modify this example to remove permissions only for a specific user, change the following line of code to identify either the display name or SMTP address of the user.

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

Cet exemple part du principe 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.This example assumes that service is a valid ExchangeService object for the mailbox owner and that the user has been authenticated to an Exchange server.

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’EWSRemoving folder permissions by using 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.The following EWS code examples show how to remove all user permissions on a specific folder, except for the default and anonymous permissions.

Tout d’abord, envoyez une demande GetFolder où la valeur DistinguishedFolderId spécifie le dossier dans lequel supprimer les autorisations (le dossier éléments envoyés dans cet exemple) et la valeur FieldURI incluent dossier : PermissionSet.First, send a GetFolder request where the DistinguishedFolderId value specifies the folder in which to remove permissions (the Sent Items folder in this example) and the FieldURI value includes folder:PermissionSet. Cette requête récupère le PermissionSet pour le dossier spécifié.This request will retrieve the PermissionSet for the folder specified.

Il s’agit également de la demande XML que l’API managée EWS envoie lorsque vous appelez la méthode Bind pour supprimer des autorisations de dossier.This is also the XML request that the EWS Managed API sends when you call the Bind method to remove folder permissions.

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

Le serveur répond à la demande GetFolder avec un message GetFolderResponse qui inclut la valeur d’élément ResponseCode NOERROR, ce qui indique que le dossier a été récupéré.The server responds to the GetFolder request with a GetFolderResponse message that includes a ResponseCode element value of NoError, which indicates that the folder was retrieved successfully. Les valeurs des éléments FolderId et ParentFolderId ont été raccourcies pour des raisons de lisibilité.The values of the FolderId and ParentFolderId elements have been shortened for readability.

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

Ensuite, utilisez l’opération UpdateFolder pour envoyer le PermissionSetmis à jour, qui n’inclut pas l' autorisation pour l’utilisateur supprimé.Next, use the UpdateFolder operation to send the updated PermissionSet, which does not include the Permission for the removed user.

Il s’agit également de la demande XML que l’API managée EWS envoie lorsque vous appelez la méthode Update pour supprimer des autorisations de dossier.This is also the XML request that the EWS Managed API sends when you call the Update method to remove folder permissions.

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

Le serveur répond à la demande UpdateFolder avec un message UpdateFolderResponse qui inclut une valeur d’élément ResponseCode de NOERROR, ce qui indique que la mise à jour a réussi.The server responds to the UpdateFolder request with an UpdateFolderResponse message that includes a ResponseCode element value of NoError, which indicates that the update was successful.

Mise à jour des autorisations de dossier à l’aide de l’API managée EWSUpdating folder permissions by using the EWS Managed API

Vous pouvez également mettre à jour les autorisations de dossier pour un dossier spécifique à l’aide de l’API managée EWS.You can also update folder permissions for a specific folder by using the EWS Managed API. Pour mettre à jour les autorisations :To update the permissions:

  1. Supprimez les autorisations de dossier pour les autorisations obsolètes, mais n’appelez pas la méthode Update (encore).Remove the folder permissions for the outdated permissions, but do not call the Update method (yet).

  2. Ajoutez des autorisations de dossier pour les utilisateurs nouveaux ou modifiés.Add folder permissions for the new or changed users.

  3. Appelez la méthode Update pour enregistrer les modifications.Call the Update method to save the changes.

Si vous essayez d’ajouter deux jeux d’autorisations pour le même utilisateur, vous recevrez une erreur ServiceResponseException avec la description suivante : "le jeu d’autorisations spécifié contient des userids en double".If you try to add two sets of permissions for the same user, you will receive a ServiceResponseException error with the following description: "The specified permission set contains duplicate UserIds". Dans ce cas, supprimez les autorisations actuelles de la collection permission , puis ajoutez les nouvelles autorisations à la collection permission .In that case, remove the current permissions from the Permission collection, then add the new permissions to the Permission collection.

Mise à jour des autorisations de dossier à l’aide d’EWSUpdating folder permissions by using 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.You can also update folder permissions for specific folders by using EWS by combining the removal and addition process. Pour mettre à jour les autorisations :To update the permissions:

  1. Récupérez les autorisations actuelles du dossier à l’aide de l’opération GetFolder .Retrieve the folder's current permissions by using the GetFolder operation.

  2. Envoyer une liste mise à jour des autorisations à l’aide de l’opération UpdateFolder .Send an updated list of permissions by using the UpdateFolder operation.

Il s’agit des deux mêmes opérations que vous utilisez pour activer ou Supprimer l’accès à l’aide d’EWS.These are the same two operations you use to enable or remove access by using EWS. La seule différence réside dans le fait que lorsque vous recevez la réponse GetFolder , celle-ci contiendra un jeu d' autorisations pour user.The only difference is that when you receive the GetFolder response, it will contain a Permission set for user. Remplacez simplement cet élément d' autorisation existant par le nouvel élément permission , puis envoyez l’opération UpdateFolder avec la ou les nouvelles valeurs d' autorisation .Simply replace that existing Permission element with the new Permission element, and then send the UpdateFolder operation with the new Permission value or values.

Si vous essayez d’ajouter deux jeux d’autorisations pour le même utilisateur, vous recevrez une valeur ResponseCode de ErrorDuplicateUserIdsSpecified.If you try to add two sets of permissions for the same user, you will receive a ResponseCode value of ErrorDuplicateUserIdsSpecified. Dans ce cas, supprimez la valeur d’autorisation périmée pour l’utilisateur de la demande, puis renouvelez la demande.In that case, remove the outdated Permission value for the user from the request and then retry the request.

Étapes suivantesNext steps

Une fois que vous avez accordé à un utilisateur l’autorisation d’accès à un dossier spécifique, l’utilisateur peut accéder au dossier en tant que délégué.After you give a user permission to a specific folder, the user can access the folder as a delegate. Si vous souhaitez en savoir plus, consultez les articles :For more information, see:

Voir aussiSee also