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");
|