2010-04-20 6 views
3

Le code suivant renvoie toujours faux (ce qui est incorrect, que l'utilisateur a l'autorisation Contrôle au niveau du site):Comment vérifier les autorisations d'utilisateur sur SharePoint 2010 à l'aide du modèle d'objet client?

Site site; 
BasePermissions permissionMask; 
ClientResult<bool> result; 

permissionMask = new BasePermissions(); 
permissionMask.Set(PermissionKind.ManageWeb); 
result = site.DoesUserHavePermissions(permissionMask); 

return result.Value; 

Je suis en train d'utiliser nouveau modèle objet client SharePoint 2010. J'ai été ravi lorsque j'ai découvert la méthode DoesUserHavePermissions, mais il semble que je ne sois pas vraiment sûr de savoir comment l'utiliser. Je n'ai aucune idée si j'utilise le masque correct, ou si je devrais spécifier le compte d'utilisateur pour lequel je souhaite vérifier le niveau d'autorisations? Toute aide serait grandement appréciée. Merci.

Répondre

4

Une chose importante manquait - le contexte client. Cet objet est responsable de l'exécution réelle de la requête sur les objets du modèle objet du client SharePoint.

Le code devrait être modifié comme suit:

ClientContext clientContext; 
Site site; 
BasePermissions permissionMask; 
ClientResult<bool> result; 

permissionMask = new BasePermissions(); 
permissionMask.Set(PermissionKind.ManageWeb); 
//if we want to check ManageWeb permission 
clientContext = new ClientContext(siteUri); 
//siteUri is a method parameter passed as a string 
clientContext.Credentials = credential; 
//credential is a method parameter passed as a NetworkCredential object 
//that is the user for which we are checking the ManageWeb permission 
site = clientContext.Web; 
result = site.DoesUserHavePermissions(permissionMask); 

return result.Value; 

Cela retourne vrai si l'utilisateur se voit attribuer des autorisations ManageWeb, false dans le cas contraire. Pour une liste complète des permissions enum, jetez un oeil à ce MSDN page.

1

Je pensais juste ajouter du code que j'utilise pour cela. Ce qui est à peu près la même chose mais sans le ballonnement.

using (var context = new ClientContext(siteUrl)) 
{ 
    context.Load(context.Web); 
    context.ExecuteQuery(); 
    BasePermissions permissionMask; 
    ClientResult<bool> hasPermissions; 
    permissionMask = new BasePermissions(); 
    permissionMask.Set(PermissionKind.ManageWeb); 
    hasPermissions = context.Web.DoesUserHavePermissions(permissionMask); 

} 
Questions connexes