Fix for CONNECTORS-754.
git-svn-id: https://svn.apache.org/repos/asf/manifoldcf/integration/sharepoint-2010/trunk@1520208 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index 922cf68..9eabfe6 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -3,6 +3,9 @@
======================= 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)
diff --git a/webservice/MCPermissions.cs b/webservice/MCPermissions.cs
index b281737..db8ee59 100644
--- a/webservice/MCPermissions.cs
+++ b/webservice/MCPermissions.cs
@@ -42,6 +42,8 @@
#region Private Fields
private readonly string itemType = "Item";
+ private readonly string listType = "List";
+ private readonly string webType = "Web";
#endregion
@@ -59,24 +61,19 @@
{
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 @@
#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 @@
/// <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 @@
{
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;
-
- foreach (SPRoleDefinition roleDefinition in assignment.RoleDefinitionBindings)
- {
- XmlNode permissionNode = CreatePermissionNode(doc, member, roleDefinition);
- permissionsNode.AppendChild(permissionNode);
- }
-
- retVal.AppendChild(permissionsNode);
- }
- }
+ return PopulateResponse(item);
}
-
- return retVal;
}
+ 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;
+
+ 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");