Author: kwright
Date: Thu Sep  5 04:56:04 2013
New Revision: 1520208

URL: http://svn.apache.org/r1520208
Log:
Fix for CONNECTORS-754.

Modified:
    manifoldcf/integration/sharepoint-2010/trunk/   (props changed)
    manifoldcf/integration/sharepoint-2010/trunk/CHANGES.txt
    manifoldcf/integration/sharepoint-2010/trunk/webservice/   (props changed)
    manifoldcf/integration/sharepoint-2010/trunk/webservice/MCPermissions.cs

Propchange: manifoldcf/integration/sharepoint-2010/trunk/
------------------------------------------------------------------------------
  Merged 
/manifoldcf/integration/sharepoint-2010/branches/CONNECTORS-754:r1519947-1520207

Modified: manifoldcf/integration/sharepoint-2010/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/manifoldcf/integration/sharepoint-2010/trunk/CHANGES.txt?rev=1520208&r1=1520207&r2=1520208&view=diff
==============================================================================
--- manifoldcf/integration/sharepoint-2010/trunk/CHANGES.txt (original)
+++ manifoldcf/integration/sharepoint-2010/trunk/CHANGES.txt Thu Sep  5 
04:56:04 2013
@@ -3,6 +3,9 @@ $Id$
 
 ======================= 0.3-dev =====================
 
+CONNECTORS-754: Remove dependency on Permissions.asmx.
+(Will Parkinson, Karl Wright)
+
 CONNECTORS-758: Change log output to go to trace log.
 (Christian M. Rieck, Will Parkinson, Karl Wright)
 

Propchange: manifoldcf/integration/sharepoint-2010/trunk/webservice/
------------------------------------------------------------------------------
  Merged 
/manifoldcf/integration/sharepoint-2010/branches/CONNECTORS-754/webservice:r1519947-1520207

Modified: 
manifoldcf/integration/sharepoint-2010/trunk/webservice/MCPermissions.cs
URL: 
http://svn.apache.org/viewvc/manifoldcf/integration/sharepoint-2010/trunk/webservice/MCPermissions.cs?rev=1520208&r1=1520207&r2=1520208&view=diff
==============================================================================
--- manifoldcf/integration/sharepoint-2010/trunk/webservice/MCPermissions.cs 
(original)
+++ manifoldcf/integration/sharepoint-2010/trunk/webservice/MCPermissions.cs 
Thu Sep  5 04:56:04 2013
@@ -42,6 +42,8 @@ namespace MetaCarta.SharePoint.SoapServe
         #region Private Fields
 
         private readonly string itemType = "Item";
+        private readonly string listType = "List";
+        private readonly string webType = "Web";
 
         #endregion
 
@@ -59,24 +61,19 @@ namespace MetaCarta.SharePoint.SoapServe
                 {
                     retVal = GetItemPermissions(objectName);
                 }
+                else if (objectType.Equals(listType))
+                {
+                    retVal = GetListPermissions(objectName);
+                }
+                else if (objectType.Equals(webType))
+                {
+                    retVal = GetWebPermissions(objectName);
+                }
                 else
                 {
-                    ServicePointManager.ServerCertificateValidationCallback +=
-                        new 
RemoteCertificateValidationCallback(ValidateCertificate);
-
-                    using (SPPermissionsService.Permissions service = new 
SPPermissionsService.Permissions())
-                    {
-                        service.Url = SPContext.Current.Web.Url + 
"/_vti_bin/Permissions.asmx";
-                        service.Credentials = 
System.Net.CredentialCache.DefaultCredentials;
-
-                        retVal = service.GetPermissionCollection(objectName, 
objectType);
-                    }
+                    throw new Exception("Unknown permission type: " + 
objectType);
                 }
             }
-            catch (SoapException soapEx)
-            {
-                throw soapEx;
-            }
             catch (Exception ex)
             {
                 SPDiagnosticsService.Local.WriteTrace(0, new 
SPDiagnosticsCategory("MCPermissions.asmx", TraceSeverity.Unexpected, 
EventSeverity.Error), TraceSeverity.Unexpected, "Error: "+ex.Message+"; 
SPContext.Current.Web.Url='"+SPContext.Current.Web.Url+"'", ex.StackTrace);
@@ -168,6 +165,42 @@ namespace MetaCarta.SharePoint.SoapServe
         #region Private Methods
 
         /// <summary>
+        /// Given the name of a list, return an XML fragment describing the 
set of permissions
+        /// for the specified list.
+        /// </summary>
+        /// <param name="itemName">A string containing the name of a list 
item</param>
+        /// <returns>An XML fragment</returns>
+        private XmlNode GetListPermissions(string listName)
+        {
+            if (string.IsNullOrEmpty(listName))
+                throw RaiseException("Parameter 'objectName' cannot be null or 
empty.", "2000", "GetPermissionCollection");
+
+            using (SPWeb site = SPContext.Current.Web)
+            {
+                SPList item = site.GetList(listName);
+
+                return PopulateResponse(item);
+            }
+        }
+
+        /// <summary>
+        /// Given the current site, return an XML fragment describing the set 
of permissions
+        /// for the site.
+        /// </summary>
+        /// <param name="itemName">A string containing the name of a list 
item</param>
+        /// <returns>An XML fragment</returns>
+        private XmlNode GetWebPermissions(string siteName)
+        {
+            if (!siteName.Equals("/"))
+                throw RaiseException("Parameter 'objectName' must be /", 
"2000", "GetPermissionCollection");
+
+            using (SPWeb site = SPContext.Current.Web)
+            {
+                return PopulateResponse(site);
+            }
+        }
+        
+        /// <summary>
         /// Given the name of a list item, return an XML fragment describing 
the set of permissions
         /// for the specified list item.
         /// </summary>
@@ -175,8 +208,6 @@ namespace MetaCarta.SharePoint.SoapServe
         /// <returns>An XML fragment</returns>
         private XmlNode GetItemPermissions(string itemName)
         {
-            XmlNode retVal = null;
-
             if (string.IsNullOrEmpty(itemName))
                 throw RaiseException("Parameter 'objectName' cannot be null or 
empty.", "2000", "GetPermissionCollection");
 
@@ -184,34 +215,39 @@ namespace MetaCarta.SharePoint.SoapServe
             {
                 SPListItem item = site.GetListItem(itemName);
 
-                if (item.RoleAssignments.Count > 0)
-                {
-                    XmlDocument doc = new XmlDocument();
-                    retVal = doc.CreateElement("GetPermissionCollection", 
-                        
"http://schemas.microsoft.com/sharepoint/soap/directory/";);
-                    XmlNode permissionsNode = doc.CreateElement("Permissions");
-
-                    // A list item can have one or more role assignments.  
Each role assignment
-                    // represents a member (user or group) with one or more 
permissions.  
-                    // The code below creates a Permission node for every 
member-permission assignment.
-                    foreach (SPRoleAssignment assignment in 
item.RoleAssignments)
-                    {
-                        SPPrincipal member = assignment.Member;
+                return PopulateResponse(item);
+            }
+        }
 
-                        foreach (SPRoleDefinition roleDefinition in 
assignment.RoleDefinitionBindings)
-                        {
-                            XmlNode permissionNode = CreatePermissionNode(doc, 
member, roleDefinition);
-                            permissionsNode.AppendChild(permissionNode);
-                        }
+        private XmlNode PopulateResponse(SPSecurableObject item)
+        {
+            XmlNode retVal = null;
+            if (item.RoleAssignments.Count > 0)
+            {
+                XmlDocument doc = new XmlDocument();
+                retVal = doc.CreateElement("GetPermissionCollection", 
+                    "http://schemas.microsoft.com/sharepoint/soap/directory/";);
+                XmlNode permissionsNode = doc.CreateElement("Permissions");
+
+                // A list item can have one or more role assignments.  Each 
role assignment
+                // represents a member (user or group) with one or more 
permissions.  
+                // The code below creates a Permission node for every 
member-permission assignment.
+                foreach (SPRoleAssignment assignment in item.RoleAssignments)
+                {
+                    SPPrincipal member = assignment.Member;
 
-                        retVal.AppendChild(permissionsNode);
+                    foreach (SPRoleDefinition roleDefinition in 
assignment.RoleDefinitionBindings)
+                    {
+                        XmlNode permissionNode = CreatePermissionNode(doc, 
member, roleDefinition);
+                        permissionsNode.AppendChild(permissionNode);
                     }
+
+                    retVal.AppendChild(permissionsNode);
                 }
             }
-
             return retVal;
         }
-
+        
         private XmlNode CreatePermissionNode(XmlDocument doc, SPPrincipal 
member, SPRoleDefinition roleDefinition)
         {
             XmlNode retVal = doc.CreateElement("Permission");


Reply via email to