2010-06-14 7 views
0

J'utilise l'API du modèle objet SharePoint 2007 pour attribuer un rôle à un objet SharePoint, mais quand vous faites cela, vous devez connaître le type d'objet SharePoint à l'avance, comme ceci:Est-il possible de déterminer par programme le type d'un objet SharePoint?

// apply the new roleassignment to the folder. You can do this at the listitem level if desired (i.e. this could be SPfile.Item…. instead of SPFolder.Item) 
folder.Item.RoleAssignments.Add(roleAssignment); 

(extrait de code de http://blogs.msdn.com/b/robgruen/archive/2007/11/15/how-to-programmatically-set-permissions-on-files-folders-in-a-sharepoint-document-library.aspx)

Je voudrais la mise en œuvre d'une méthode qui est en mesure de passer l'objet SharePoint, déterminer le type d'objet SharePoint pour ressembler à ceci:

public static bool AssignRole(string spWebUrl, object spObject, SPUser oUser, string spRoleDefinition); 

Exemple objet SharePoint types seraient: SPSite, SPWeb, SPList, SPListItem, SPField, SPFolder

Toute aide sur la façon de résoudre le problème de la détermination du type de l'objet SharePoint serait très appréciée.

Sidenote:
There is a way to determine the object type (en quelque sorte), si vous connaissez l'URL complète de l'endroit où l'objet se trouve dans le site, bien que ce soit vraiment pas une route que je voudrais descendre.

Répondre

3

Je présume que vous ne voulez pas dupliquer le code?

Au lieu de l'objet pourquoi ne pas utiliser SPRoleAssignmentCollection?

AssignRole(string spWebUrl, SPRoleAssignmentCollection spAssignmentCollection, 
      SPUser oUser, string spRoleDefinition); 

Et vous appelez la fonction

AssignRole(spWebUrl, spObject.RoleAssignments, oUser, spRoleDefinition); 

au lieu de votre intention

AssignRole(spWebUrl, spObject, oUser, spRoleDefinition); 

Si vous voulez vraiment vraiment passer un objet que vous avez au moins les options suivantes

  • utiliser le is mot-clé
  • utilisez les méthodes GetType et TypeOf pour comparer l'identité de type.

Pour un exemple d'utilisation des deux ci-dessus et aussi leur différence voir: http://bytes.com/topic/c-sharp/answers/641093-difference-between-gettype-typeof-class

Je ne conseillerais pas avoir une telle méthode bien.

Qu'est-ce qui empêche les utilisateurs de la méthode de passer dans une liste? Maintenant vous auriez besoin d'une exception qui est levée (ou une valeur de retour) lorsqu'elle est passée dans un objet invalide.

En outre, que se passe-t-il si sharepoint ajoute de nouveaux objets auxquels des rôles peuvent être assignés? Si vous avez déjà envoyé ce code à de nombreux clients, souhaitez-vous envoyer une mise à jour?

Espérons que ça aide. Bonne chance!

+0

Je ne pense pas que cela aidera dans ma situation. Je veux utiliser une méthode pour attribuer des autorisations à n'importe quel objet sharepoint. Je souhaite passer l'objet sharepoint en tant que paramètre, puis déterminer le type SharePoint dans la méthode et affecter l'autorisation de manière appropriée. Je préférerais ne pas avoir une méthode pour assigner des permissions à un dossier, et une méthode pour assigner des permissions à une liste aussi, etc. Peut-être que ce que je demande n'est pas possible? – program247365

+0

@ program247365: Il est possible d'utiliser C# lui-même. Je ne suis pas sûr que Sharepoint a quelque chose. J'ai édité ma réponse pour ajouter cette information. –

+1

La solution de Moron est bonne. Cela n'a pas de sens d'écrire une méthode capable de gérer n'importe quel type de SPObject car finalement seuls les objets hérités de SPSecurableObject peuvent stocker des permissions. SPField ne peut pas stocker d'autorisations du tout et SPSite est un cas particulier. Les administrateurs SPSite sont définis via la propriété "IsSiteAdmin" du SPUser et toutes les autres autorisations sont définies sur la racine SPWeb de la base SPSite. Donc la solution de Moron peut gérer tous les autres objets que vous avez mentionnés dans votre question. – Flo

Questions connexes