So you want to have a web part which lists the sites which "I" have access to… easier said than done. Below is my code for doing this… except it doesn't work. Well, it works for me because I'm an administrator but not for other users. It iterates through all site collections in the farm and and does GetSubWebsforCurrentUser. Which is fine, because I have permissions to read the properties of all site collections – a normal user of course, does not! I tried using elevated authority and all sorts of tricks but so far haven't been able to finagle it. I do have one idea… that is to drop all the info I need into a string array using elevated authority and then do GetSubWebsforCurrentUser on site collections where no errors are raised for the authenticated user. I haven't had a spare second to try that out yet but I will… So for the benefit of others – and hopefully someone else will have a brainwave in the meantime – here is the errant code in question… using System; using Microsoft.SharePoint; namespace CSR.Sharepoint.WebParts { [Guid("0d546513-7447-4211-8fc9-75117af712b0")] public class MyCollaborationSites : System.Web.UI.WebControls.WebParts.WebPart { public MyCollaborationSites() protected override void Render(HtmlTextWriter writer) } private void GetSubSites(int ilevel, SPWeb oWeb, HtmlTextWriter writer) if (ilevel != 1) if (oSPWeb.GetSubwebsForCurrentUser().Count > 0)
using System.Text;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Web;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Publishing;
{
this.ExportMode = WebPartExportMode.All;
}
{
SPWebApplication oWebApp = SPContext.Current.Site.WebApplication;
SPSiteCollection oSites = oWebApp.Sites;
foreach (SPSite site in oSites) {
SPWeb oWeb = site.RootWeb;
int ilevel = 1;
if (!PublishingSite.IsPublishingSite(site))//don't include portal
{
GetSubSites(ilevel, oWeb, writer);
};
};
{
Boolean alternate = false;
foreach (SPWeb oSPWeb in oWeb.GetSubwebsForCurrentUser())
{
{
if (alternate == true)
{
writer.Write("<tr><td class=csr-RowGrey><a href='" + SPEncode.HtmlEncode(oSPWeb.Url) + "' target='" + SPEncode.HtmlEncode(oSPWeb.Title.Replace(" ", "")) + "'>" + SPEncode.HtmlEncode(oSPWeb.Title) + "</a></td></td>");
}
else
{
writer.Write("<tr><td class=csr-Rowwhite><a href='" + SPEncode.HtmlEncode(oSPWeb.Url) + "' target='" + SPEncode.HtmlEncode(oSPWeb.Title.Replace(" ", "")) + "'>" + SPEncode.HtmlEncode(oSPWeb.Title) + "</a></td></td>");
alternate = true;
}
}
{
ilevel = ilevel + 1;
GetSubSites(ilevel, oSPWeb, writer);
}
}
}
}
}
Thursday, 25 October 2007
Sharepoint 2007 (MOSS) – List “My” Sites
Posted by Kristen Hodges at 3:17 pm
Labels: Sharepoint 2007 (MOSS)
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment