2009-11-13 4 views
0

J'ai besoin de verrouiller l'accès à une bibliothèque SharePoint: Seuls les utilisateurs appartenant à tous les groupes associés à la bibliothèque doivent avoir un accès en lecture; les autres ne devraient pas être autorisés à lire.comment définir des autorisations exclusives sur une bibliothèque de documents SharePoint?

Disons que j'ai une bibliothèque de documents qui porte sur trois projets:

12345 
13579 
24680 

Je les utilisateurs qui appartiennent à un ou plusieurs projets:

Joe: 12345, 24680 
Jane: 13579, 24680 
Jim: 24680 
Harry: 12345, 13579, 24680 

J'ai besoin de restreindre l'accès à cette bibliothèque seulement les utilisateurs qui appartiennent à TOUS les projets. C'est-à-dire, seul Harry devrait avoir accès; les autres devraient être refusés. Nous utiliserions les groupes SharePoint nommés après chaque projet pour représenter la relation 'appartient'.

Edité avec plus de détails:

Nous projetons de créer le doc lib et mettre en place la sécurité initiale via un flux de travail. Cependant, d'autres projets peuvent être associés à doclib après sa création, en fonction des informations saisies dans un formulaire, et les administrateurs peuvent être déplacés dans et hors des groupes de projets par les administrateurs (par exemple pour les promotions, les nouvelles recrues ...)

Pour l'instant, si une soumission de formulaire ajoute un nouveau projet après la configuration d'inital, un administrateur créera probablement un nouveau groupe si nécessaire, et lui assignera l'accès à doclib. Finalement, nous ferions cela dans un flux de travail.

Actuellement, nous sommes à écrire du code pour affecter l'état de sécurité initial pour le site:

Nous numérisons une liste des projets présentés par un utilisateur dans un formulaire, créer de nouveaux groupes de projet si nécessaire, créer un site et un couple de doclibs, cassez l'héritage des rôles et attribuez à nos groupes un accès en lecture à doclib. Nous ajoutons des utilisateurs à chaque groupe de projet.

À ce stade, tous ces utilisateurs ont un accès en lecture. Ce que nous ne savons pas comment faire est de restreindre l'accès aux seuls utilisateurs qui sont membres de tous les groupes.

+0

J'essayais d'écrire une réponse détaillée, mais il m'est apparu que je ne pense pas qu'il y ait suffisamment de détails ici. Les affiliations du projet doclib sont-elles statiques? Si elles changent, comment/quand changeront-elles? Vont-ils changer lorsque des documents sont ajoutés/supprimés/modifiés dans la bibliothèque? Votre question porte-t-elle vraiment sur la façon d'écrire du code pour gérer les groupes de sécurité, ou votre question concerne-t-elle plutôt les modifications apportées à la bibliothèque ou à ses documents? –

+0

bonnes questions! J'ai édité le post ... laissez-moi savoir si vous avez besoin de plus. – Val

Répondre

3

Vous avez fait du mal sur vous-même .. SharePoint ni AD fonctionne de cette façon, je vais revenir à la planche à dessin, car cela ne fera que causer de la douleur;)

Je découpler la gestion des groupes et de leurs affectation à des bibliothèques de documents et des droits de synchronisation dans SharePoint comme Koen mentionné. par exemple. vous gérez l'appartenance au groupe séparément des groupes que vous utilisez pour les connecter aux bibliothèques de documents. Ensuite, vous avez besoin d'un processus pour énumérer ces groupes distincts et affecter les utilisateurs aux bibliothèques de documents individuellement en fonction de vos règles métier. Cassant au mieux.

+0

vous avez raison, nous étions en train de faire dur sur nous-mêmes. Nous changeons les exigences ... – Val

1

Vous pouvez définir votre bibliothèque de documents sur BreakRoleInheritance et définir des autorisations sur vos éléments individuellement.

Ceci est un exemple:

SPSecurity.RunWithElevatedPrivileges(delegate() 
{ 
    using (SPSite site = new SPSite("http://...")) 
    { 
     using (SPWeb web = site.OpenWeb()) 
     { 
      web.AllowUnsafeUpdates = true; 
      SPRoleType role = SPRoleType.Reader; 
      SPRoleAssignment assignment = 
       new SPRoleAssignment(web.Groups["groupname"]); 
      assignment.RoleDefinitionBindings.Add(
       web.RoleDefinitions.GetByType(role)); 

      SPList list = web.Lists["name"]; 
      SPListItemCollection items = list.GetItems(new SPQuery()); 
      foreach (SPListItem item in items) 
      { 
       if (!item.HasUniqueRoleAssignments) 
        item.BreakRoleInheritance(false); 

       while (item.RoleAssignments.Count != 0) // remove all 
         item.RoleAssignments.Remove(
         item.RoleAssignments.Count - 1); 

       item.RoleAssignments.Add(assignment); 
      } 
     } 
    } 
}); 
+0

Oui, nous prévoyons de briser l'héritage. Je demande comment définir les autorisations. Nous ne pouvons pas le faire manuellement - nous devons le faire par programmation à un certain point dans un flux de travail. J'espère avoir une façon déclarative de le faire, de sorte que j'ajoute simplement des utilisateurs à divers groupes, et que je place le DocLib du projet dans divers groupes. Cela fonctionne essentiellement pour la relation OR: nous rompons l'héritage et définissons l'accès en lecture sur DocLib aux membres du groupe 1, 2 ou 3, et si un utilisateur est membre de 1, 2 ou 3, le système les laisse entrer. nous avons mis l'accès en lecture sur le DocLib aux membres des groupes 1, 2 et 3? – Val

0

La seule façon que je peux penser à y parvenir est de créer un travail de minuteur personnalisé qui met à jour votre bibliothèque de documents chaque jour en supprimant tous les droits, puis les ajouter à nouveau pendant la nuit. Cela voudrait dire que les personnes qui rejoignent ces projets devront attendre 1 jour pour avoir accès. Vous devez simplement créer une collection de tous les utilisateurs de group1, et vérifier chacun s'ils existent dans les groupes 2, 3, ... et s'ils ne les suppriment pas de la collection.

Questions connexes