2010-10-13 2 views
4

J'ai une question concernant les masques d'autorisation SharePoint. Dans SharePoint, il est possible de définir les droits grant/deny à l'aide de masques. Les détails sont donnés l'article suivant.Autorisation/Refuser le masque dans SharePoint

http://msdn.microsoft.com/en-us/library/dd304243(PROT.13).aspx

Ma question est quand nous avons une autorisation/nier masque. Par exemple, si vous refusez l'autorisation "ViewItem" à l'aide de l'administrateur central, vous obtiendrez le 4611686844973976575 comme masque de refus. Ces masques d'autorisation sont calculés par aping | à plusieurs masques d'autorisation individuels.

Est-il possible d'extraire des masques d'autorisation individuels qui sont utilisés pour calculer le masque d'autorisation tel que 4611686844973976575?

Merci.

Répondre

4

Si vous effectuez une opération ET logique sur une valeur telle que 0x0000000000000001 pour "ViewListItems" qui est contenue dans le masque, vous obtiendrez la valeur elle-même (ou 1). Si vous faites un AND logique sur une valeur qui n'est pas dans ce masque, comme la valeur "UseClientIntegration" de 0x0000001000000000, alors vous obtiendrez un zéro (0). C'est quelque chose que vous pouvez même tester via le mode scientifique de l'application calculatrice Windows - peut-être d'abord convertir le masque en hexadécimal, comme prendre votre exemple de 4611686844973976575 de base 10 à 400000C072040BFF en hexadécimal (base 16).

Pour extraire toutes les valeurs du masque, vous devez tester la valeur initiale par rapport à toutes les valeurs possibles. Si toutes les valeurs d'autorisation connues sont documentées sur cette page, la réponse à votre question est oui. Je ne sais pas quelle langue que vous pouvez accomplir, mais l'idée de base en C# est:

bool CheckMask(long Mask, long TestPermission) { 
    return (Mask && TestPermission) > 0; 
} 

long mask = 4611686844973976575; 

const long ViewListItems = 0x0000000000000001; 
bool HasPermission_ViewListItems = CheckMask(mask, ViewListItems); 
// HasPermission_ViewListItems is true 

const long UseClientIntegration = 0x0000001000000000; 
bool HasPermission_UseClientIntegration = CheckMask(mask, UseClientIntegration); 
// HasPermission_UseClientIntegration is false 
+0

Cela devrait être (masque et TestPermission)> 0: voir ici http://stackoverflow.com/questions/11103412/operator-cannot-be-applied –

+0

quand même. merci pour le correctif ressuscité. – zanlok

2

J'ai fait cet exemple javascript grâce à @zanlok réponse

je JQuery, SPServices js (http://spservices.codeplex.com/) et ce lien pour les codes de masques http://msdn.microsoft.com/en-us/library/dd304243%28PROT.13%29.aspx J'espère que cela vous aide, je l'ai fait parce que j'en avais besoin aussi, mais il peut aussi aider les autres.

Vous devez remplacer la division par la valeur du contrôle que vous voulez placer le code HTML, et le nom de la liste ICI avec le nom de la liste.

Le script va cracher tout le monde qui a accès à une liste, et dire si elles peuvent lire, ajouter, modifier et supprimer des choses. Espère que cela vous aide.

$('#divid').html('Working...').SPServices({ 
    operation: "GetPermissionCollection", 
    objectName: 'LIST NAME HERE', 
    objectType: "List", 
    completefunc: function (xData, Status) { 
     var out = "<ul>"; 
     $(xData.responseXML).find("Permission").each(function() { 
      if ($(this).attr("MemberIsUser") === "True") { 
       out += "<li>User: " + $(this).attr("UserLogin") + "</li>"; 
      } else { 
       out += "<li>Group: " + $(this).attr("GroupName") + "</li>"; 
      } 
      var readmask = 0x0000000000000001; 
      var addmask = 0x0000000000000002; 
      var editmask = 0x0000000000000004; 
      var deletemask = 0x0000000000000008; 
      out += "<li>Mask: " + $(this).attr("Mask") + "</li>"; 
      var canread = readmask & $(this).attr("Mask").toString(16) > 0 ? "Yes" : "No"; 
      var canadd = addmask & $(this).attr("Mask").toString(16) > 0 ? "Yes" : "No"; 
      var canedit = editmask & $(this).attr("Mask").toString(16) > 0 ? "Yes" : "No"; 
      var candelete = deletemask & $(this).attr("Mask").toString(16) > 0 ? "Yes" : "No"; 
      out += "<li>Can Read: " + canread + "</li>"; 
      out += "<li>Can Add: " + canadd + "</li>"; 
      out += "<li>Can Edit: " + canedit + "</li>"; 
      out += "<li>Can Delete: " + candelete + "</li>"; 
     }); 
     out += "</ul>"; 
     $('divid').html(out); 
    } 
}); 
+0

Bon de voir quelqu'un l'utiliser. Merci pour l'assistance :) – zanlok

+0

@Zanlok J'ai remarqué que lorsque quelqu'un a plus d'un rôle, cela ne fonctionne pas correctement, je reçois seulement un des masques de l'utilisateur. Apparemment, il y en a un autre. Avez-vous des informations à ce sujet? –

+0

Je n'ai pas fait face à cela, mais peut-être vérifier sur le retour de [GetPermissionCollection] (http://social.msdn.microsoft.com/Forums/en/sharepointdevelopment/thread/c32bc150-7249-423d-8018-d2f23afc1f3b). – zanlok