{"id":938,"date":"2012-03-07T11:44:34","date_gmt":"2012-03-07T10:44:34","guid":{"rendered":"http:\/\/blog.kodono.info\/wordpress\/?p=938"},"modified":"2012-03-07T12:00:43","modified_gmt":"2012-03-07T11:00:43","slug":"modifier-les-permissions-dune-liste-sharepoint-en-utilisant-permissions-aspx-et-javascript-sharepoint","status":"publish","type":"post","link":"https:\/\/blog.kodono.info\/wordpress\/2012\/03\/07\/modifier-les-permissions-dune-liste-sharepoint-en-utilisant-permissions-aspx-et-javascript-sharepoint\/","title":{"rendered":"Modifier les permissions d&#8217;une liste Sharepoint en utilisant permissions.aspx et JavaScript [Sharepoint]"},"content":{"rendered":"<p>Il est possible d&#8217;utiliser les web services de Sharepoint pour effectuer un certain nombre d&#8217;op\u00e9rations. Il existe divers API (comme <a href=\"http:\/\/spservices.codeplex.com\" title=\"Lien vers SPServices\">http:\/\/spservices.codeplex.com<\/a> que j&#8217;utiliserai ici) pour aider dans ces op\u00e9rations.<\/p>\n<p>Cependant il est difficile de trouver de la documentation \/ exemples sur comment utiliser <code>AddPermission<\/code>, <code>RemovePermission<\/code> et <code>UpdatePermissions<\/code>. Apr\u00e8s avoir longuement fouill\u00e9 le Net, voici ce que j&#8217;ai trouv\u00e9.<\/p>\n<p>Tout d&#8217;abord, pour assigner un r\u00f4le d\u00e9fini sur votre site (comme &#8220;Contribute&#8221;, &#8220;Full Control&#8221;, &#8220;Read&#8221;, etc) il va falloir trouver les droits associ\u00e9s. Pour cela on utilise <code>GetRoleCollectionFromWeb<\/code><\/p>\n<pre class=\"brush:javascript\">\r\n$().SPServices({\r\n  operation:\"GetRoleCollectionFromWeb\",\r\n  webURL:\"http:\/\/mon.site.com\/ma\/collection\/\",\r\n  completefunc: function (xData, Status) {\r\n    var roles=[]; \/\/ va contenir les diff\u00e9rents r\u00f4les existants et les permissions associ\u00e9es\r\n    var dom=xData.responseXML.getElementsByTagName(\"Role\");\r\n    for (var i=dom.length; i--;) roles[dom[i].getAttribute(\"Name\")]=dom[i].getAttribute(\"BasePermissions\").split(\", \");\r\n  }\r\n});\r\n<\/pre>\n<p>Maintenant on va avoir un tableau associatif qui lie un r\u00f4le (par exemple &#8220;Contribute&#8221;) \u00e0 un ensemble de permissions (ici \u00e7a sera &#8220;ViewListItems, AddListItems, EditListItems, DeleteListItems, OpenItems, ViewVersions, DeleteVersions, ManagePersonalViews, ViewFormPages, Open, ViewPages, CreateSSCSite, BrowseDirectories, BrowseUserInfo, AddDelPrivateWebParts, UpdatePersonalWebParts, UseClientIntegration, UseRemoteAPIs, CreateAlerts, EditMyUserInfo&#8221;).<\/p>\n<p>Gr\u00e2ce \u00e0 la documentation de Microsoft portant sur les <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/dd304243%28PROT.13%29.aspx\" title=\"Lien vers la documentation Microsoft pour les masks\">masks de permissions<\/a> on va cr\u00e9er un autre tableau associatif pour chacune de ces <code>BasePermissions<\/code>.<br \/>\nAussi on sait qu&#8217;il faut faire un <code>OR<\/code> entre chaque mask pour avoir celui qu&#8217;on souhaite.<\/p>\n<pre class=\"brush:javascript\">\r\n\/\/ @param basePermissions est un tableau\r\nfunction getPermissionMask(basePermissions) {\r\n  \/\/ on cr\u00e9e un tableau bas\u00e9 sur la doc Microsoft\r\n  var permissions=[];\r\n  \/\/ on rajoute \"FullMask\" qui est le Full Control\r\n  permissions[\"FullMask\"] = -1;\r\n  permissions[\"ViewListItems\"] = parseInt(\"0x0000000000000001\");\r\n  permissions[\"AddListItems\"] = parseInt(\"0x0000000000000002\");\r\n  permissions[\"EditListItems\"] = parseInt(\"0x0000000000000004\");\r\n  permissions[\"DeleteListItems\"] = parseInt(\"0x0000000000000008\");\r\n  permissions[\"ApproveItems\"] = parseInt(\"0x0000000000000010\");\r\n  permissions[\"OpenItems\"] = parseInt(\"0x0000000000000020\");\r\n  permissions[\"ViewVersions\"] = parseInt(\"0x0000000000000040\");\r\n  permissions[\"DeleteVersions\"] = parseInt(\"0x0000000000000080\");\r\n  permissions[\"CancelCheckout\"] = parseInt(\"0x0000000000000100\");\r\n  permissions[\"ManagePersonalViews\"] = parseInt(\"0x0000000000000200\");\r\n  permissions[\"ManageLists\"] = parseInt(\"0x0000000000000800\");\r\n  permissions[\"ViewFormPages\"] = parseInt(\"0x0000000000001000\");\r\n  permissions[\"Open\"] = parseInt(\"0x0000000000010000\");\r\n  permissions[\"ViewPages\"] = parseInt(\"0x0000000000020000\");\r\n  permissions[\"AddAndCustomizePages\"] = parseInt(\"0x0000000000040000\");\r\n  permissions[\"ApplyThemeAndBorder\"] = parseInt(\"0x0000000000080000\");\r\n  permissions[\"ApplyStyleSheets\"] = parseInt(\"0x0000000000100000\");\r\n  permissions[\"ViewUsageData\"] = parseInt(\"0x0000000000200000\");\r\n  permissions[\"CreateSSCSite\"] = parseInt(\"0x0000000000400000\");\r\n  permissions[\"ManageSubwebs\"] = parseInt(\"0x0000000000800000\");\r\n  permissions[\"CreateGroups\"] = parseInt(\"0x0000000001000000\");\r\n  permissions[\"ManagePermissions\"] = parseInt(\"0x0000000002000000\");\r\n  permissions[\"BrowseDirectories\"] = parseInt(\"0x0000000004000000\");\r\n  permissions[\"BrowseUserInfo\"] = parseInt(\"0x0000000008000000\");\r\n  permissions[\"AddDelPrivateWebParts\"] = parseInt(\"0x0000000010000000\");\r\n  permissions[\"UpdatePersonalWebParts\"] = parseInt(\"0x0000000020000000\");\r\n  permissions[\"ManageWeb\"] = parseInt(\"0x0000000040000000\");\r\n  permissions[\"UseClientIntegration\"] = parseInt(\"0x0000001000000000\");\r\n  permissions[\"UseRemoteAPIs\"] = parseInt(\"0x0000002000000000\");\r\n  permissions[\"ManageAlerts\"] = parseInt(\"0x0000004000000000\");\r\n  permissions[\"CreateAlerts\"] = parseInt(\"0x0000008000000000\");\r\n  permissions[\"EditMyUserInfo\"] = parseInt(\"0x0000010000000000\");\r\n\r\n  \/\/maintenant on va faire des OR selon basePermissions\r\n  var mask = 1;\r\n  for (var i=basePermissions.length; i--;) mask |= permissions[basePermissions[i]];\r\n  return mask;\r\n}\r\n<\/pre>\n<p>Et enfin on utilise ce mask avec <code>AddPermission<\/code> :<\/p>\n<pre class=\"brush:javascript\">\r\n$().SPServices({\r\n  operation:\"AddPermission\",\r\n  webURL:\"http:\/\/mon.site.com\/ma\/collection\/\",\r\n  objectName:\"Nom de la Liste\",\r\n  objectType:\"List\",\r\n  permissionIdentifier:\"domain\\\\login\", \/\/ par exemple \"europe\\\\john_doe\"\r\n  permissionType:\"user\", \/\/ car c'est un username qu'on a donn\u00e9... si on avait donn\u00e9 un Sharepoint Group alors on aurait mis \"group\"\r\n  permissionMask:getPermissionMask(roles[\"Contribute\"]),\r\n  completefunc: function (xData, Status) { alert(\"Permissions ajout\u00e9s\"); }\r\n});\r\n<\/pre>\n<p>Plus d&#8217;infos sur les arguments disponibles dans la <a href=\"http:\/\/spservices.codeplex.com\/wikipage?title=Permissions\" title=\"Lien vers la document de SPServices\">documentation de SPServices sur les Permissions<\/a>.<\/p>\n<p>On peut enfin tout mettre ensemble, ce qui donnera :<\/p>\n<pre class=\"brush:javascript\">\r\n\/\/ @param basePermissions est un tableau\r\nfunction getPermissionMask(basePermissions) {\r\n  \/\/ on cr\u00e9e un tableau bas\u00e9 sur la doc Microsoft\r\n  var permissions=[];\r\n  \/\/ on rajoute \"FullMask\" qui est le Full Control\r\n  permissions[\"FullMask\"] = -1;\r\n  permissions[\"ViewListItems\"] = parseInt(\"0x0000000000000001\");\r\n  permissions[\"AddListItems\"] = parseInt(\"0x0000000000000002\");\r\n  permissions[\"EditListItems\"] = parseInt(\"0x0000000000000004\");\r\n  permissions[\"DeleteListItems\"] = parseInt(\"0x0000000000000008\");\r\n  permissions[\"ApproveItems\"] = parseInt(\"0x0000000000000010\");\r\n  permissions[\"OpenItems\"] = parseInt(\"0x0000000000000020\");\r\n  permissions[\"ViewVersions\"] = parseInt(\"0x0000000000000040\");\r\n  permissions[\"DeleteVersions\"] = parseInt(\"0x0000000000000080\");\r\n  permissions[\"CancelCheckout\"] = parseInt(\"0x0000000000000100\");\r\n  permissions[\"ManagePersonalViews\"] = parseInt(\"0x0000000000000200\");\r\n  permissions[\"ManageLists\"] = parseInt(\"0x0000000000000800\");\r\n  permissions[\"ViewFormPages\"] = parseInt(\"0x0000000000001000\");\r\n  permissions[\"Open\"] = parseInt(\"0x0000000000010000\");\r\n  permissions[\"ViewPages\"] = parseInt(\"0x0000000000020000\");\r\n  permissions[\"AddAndCustomizePages\"] = parseInt(\"0x0000000000040000\");\r\n  permissions[\"ApplyThemeAndBorder\"] = parseInt(\"0x0000000000080000\");\r\n  permissions[\"ApplyStyleSheets\"] = parseInt(\"0x0000000000100000\");\r\n  permissions[\"ViewUsageData\"] = parseInt(\"0x0000000000200000\");\r\n  permissions[\"CreateSSCSite\"] = parseInt(\"0x0000000000400000\");\r\n  permissions[\"ManageSubwebs\"] = parseInt(\"0x0000000000800000\");\r\n  permissions[\"CreateGroups\"] = parseInt(\"0x0000000001000000\");\r\n  permissions[\"ManagePermissions\"] = parseInt(\"0x0000000002000000\");\r\n  permissions[\"BrowseDirectories\"] = parseInt(\"0x0000000004000000\");\r\n  permissions[\"BrowseUserInfo\"] = parseInt(\"0x0000000008000000\");\r\n  permissions[\"AddDelPrivateWebParts\"] = parseInt(\"0x0000000010000000\");\r\n  permissions[\"UpdatePersonalWebParts\"] = parseInt(\"0x0000000020000000\");\r\n  permissions[\"ManageWeb\"] = parseInt(\"0x0000000040000000\");\r\n  permissions[\"UseClientIntegration\"] = parseInt(\"0x0000001000000000\");\r\n  permissions[\"UseRemoteAPIs\"] = parseInt(\"0x0000002000000000\");\r\n  permissions[\"ManageAlerts\"] = parseInt(\"0x0000004000000000\");\r\n  permissions[\"CreateAlerts\"] = parseInt(\"0x0000008000000000\");\r\n  permissions[\"EditMyUserInfo\"] = parseInt(\"0x0000010000000000\");\r\n\r\n  \/\/maintenant on va faire des OR selon basePermissions\r\n  var mask = 1;\r\n  for (var i=basePermissions.length; i--;) mask |= permissions[basePermissions[i]];\r\n  return mask;\r\n}\r\n\r\n$().SPServices({\r\n  operation:\"GetRoleCollectionFromWeb\",\r\n  webURL:\"http:\/\/mon.site.com\/ma\/collection\/\",\r\n  completefunc: function (xData, Status) {\r\n    var roles=[]; \/\/ va contenir les diff\u00e9rents r\u00f4les existants et les permissions associ\u00e9es\r\n    var dom=xData.responseXML.getElementsByTagName(\"Role\");\r\n    for (var i=dom.length; i--;) roles[dom[i].getAttribute(\"Name\")]=dom[i].getAttribute(\"BasePermissions\").split(\", \");\r\n    $().SPServices({\r\n      operation:\"AddPermission\",\r\n      webURL:\"http:\/\/mon.site.com\/ma\/collection\/\",\r\n      objectName:\"Nom de la Liste\",\r\n      objectType:\"List\",\r\n      permissionIdentifier:\"domain\\\\login\", \/\/ par exemple \"europe\\\\john_doe\"\r\n      permissionType:\"user\", \/\/ car c'est un username qu'on a donn\u00e9... si on avait donn\u00e9 un Sharepoint Group alors on aurait mis \"group\"\r\n      permissionMask:getPermissionMask(roles[\"Contribute\"]),\r\n      completefunc: function (xData, Status) { alert(\"Permissions ajout\u00e9s\"); }\r\n    });\r\n  }\r\n});\r\n<\/pre>\n<p>A noter :<br \/>\n&#8211; <code>UpdatePermission<\/code> va remplacer les permissions d&#8217;une personne;<br \/>\n&#8211; Toute personnalisation des permissions sur la liste va entrainer l&#8217;arr\u00eat des droits inh\u00e9rents (avec Sharepoint 2010 il sera possible de remettre les droits parents gr\u00e2ce \u00e0 <a href=\"http:\/\/msdn.microsoft.com\/de-de\/library\/hh185013.aspx\" title=\"Lien vers la documentation Microsoft\">How to: Break Role Assignment Inheritance Using ECMAScript<\/a>)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il est possible d&#8217;utiliser les web services de Sharepoint pour effectuer un certain nombre d&#8217;op\u00e9rations. Il existe divers API (comme http:\/\/spservices.codeplex.com que j&#8217;utiliserai ici) pour aider dans ces op\u00e9rations. Cependant il est difficile de trouver de la documentation \/ exemples sur comment utiliser AddPermission, RemovePermission et UpdatePermissions. Apr\u00e8s avoir longuement fouill\u00e9 le Net, voici ce [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","hide_page_title":"","footnotes":""},"categories":[20,33],"tags":[24,155,117],"class_list":["post-938","post","type-post","status-publish","format-standard","hentry","category-niveau-expert","category-programmation","tag-javascript","tag-niveau-expert","tag-sharepoint"],"_links":{"self":[{"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/posts\/938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/comments?post=938"}],"version-history":[{"count":8,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/posts\/938\/revisions"}],"predecessor-version":[{"id":946,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/posts\/938\/revisions\/946"}],"wp:attachment":[{"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/media?parent=938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/categories?post=938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kodono.info\/wordpress\/wp-json\/wp\/v2\/tags?post=938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}