In one of my projects, I had to develop an application page which display all SharePoint groups & users for a specific site collection and all the users even with visitor role should be able to view this page. Out-of-the-box, SharePoint 2007 does not provide this page. Therefore, I developed a solution to facilitate users.
Prerequisite:
Publishing features (site and web) level must be enabled.
What has to be developed:
- An custom application page
- A user control and application page will host this user control.
Step2: Create an application page named "DisplayGroupsUsers.aspx". (Refer to my earlier blog post)
Custom Application Page:
-----------------------------------------------------------------------------------------
<%@ Page Language="C#" MasterPageFile="~masterurl/default.master" %>
<%--Control Place Holder--%>
<asp:Content ID="PageTitle" runat="server" contentplaceholderid="PlaceHolderPageTitle" >
View Group Membership
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" runat="server"
contentplaceholderid="PlaceHolderPageTitleInTitleArea" >
View Group Membership
</asp:Content>
<asp:Content ID="Main" runat="server" ContentPlaceHolderID="PlaceHolderMain">
<div>
</div>
</asp:Content>
---------------------------------------------------------------------------------------------
Step3: Create a user control named: "COM_DisplayGroupsUsers.ascx": (Refer to my earlier blog post)
Step4: In this user control, we will display SharePoint groups and users in a ASP.NET TreeView control.
For a user interface for the user control, we can add some text and drag drop the TreeView control from the "Toolbox" as follows:
COM_DisplayGroupsUsers.ascx:
---------------------------------------------------------------------------------------------------------------------
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="COM_DisplayGroupsUsers.ascx.cs" Inherits="DisplayGroupsUsers.COM_DisplayGroupsUsers, DisplayGroupsUsers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f006780d75630210" %>
<p>
This page displays all the SharePoint groups and users for the site.
</p>
<p>
<asp:TreeView ID="treeView" runat="server" ImageSet="Contacts" NodeIndent="10"
Width="250px">
<ParentNodeStyle Font-Bold="True" ForeColor="#5555DD" />
<HoverNodeStyle Font-Underline="False" />
<SelectedNodeStyle Font-Underline="True" HorizontalPadding="0px"
VerticalPadding="0px" />
<NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black"
HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" />
</asp:TreeView>
</p>
----------------------------------------------------------------------------------------------------------
For the user control code, we have to supply the delegate (SPSecurity.RunWithElevatedPrivileges) so that all users can view all SharePoint groups and users. Once its done,we have to manipulate Groups and users in a treeview.
---------------------------------------------------------------------------------------------------------
COM_DisplayGroupsUsers.ascx.cs:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
namespace DisplayGroupsUsers
{
public partial class COM_DisplayGroupsUsers : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SPSecurity.RunWithElevatedPrivileges(delegate
{
//Get the current site
using (SPSite site = new SPSite(SPContext.Current.Site.ID))
{
using (SPWeb currentWeb = site.OpenWeb())
{
// set the tree view properties
treeView.ShowLines = true; //show lines
treeView.ExpandDepth = 1; //expand level one in the treeview
//get all the SharePoint groups within current site
SPGroupCollection groupCollection =
currentWeb.Groups;
//loop all SharePoint groups
foreach (SPGroup group in groupCollection)
{
//get all the SharePoint users within a specified group
SPUserCollection userCollection = group.Users;
//build the tree
TreeNode rootNode = new TreeNode(group.Name,
"",
"~/_layouts/images/GroupsUsers/Groups.gif",
"", "");
treeView.Nodes.Add(rootNode);
//loop the users in a specific SharePoint group
foreach (SPUser user in userCollection)
{
//add a new node for the current user
TreeNode newNode = new TreeNode(
user.Name, "",
"~/_layouts/images/GroupsUsers/User.gif",
"", "");
rootNode.ChildNodes.Add(newNode);
}
}
}
}
});
}
}
}
}
------------------------------------------------------------------------------------------------
Step5: In the DisplayGroupsUser.aspx page, we need to host the user control as follows:
DisplayGroupsUsers.aspx with user control:
--------------------------------------------------------------------------------------------------
<%@ Page Language="C#" MasterPageFile="~masterurl/default.master" %>
<%@ Register src="~/_controltemplates/COM_DisplayGroupsUsers.ascx" tagname="COM_DisplayGroupsUsers" tagprefix="wssuc" %>
<%--Control Place Holder--%>
<asp:Content ID="PageTitle" runat="server" contentplaceholderid="PlaceHolderPageTitle" >
View Group Membership
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" runat="server"
contentplaceholderid="PlaceHolderPageTitleInTitleArea" >
View Group Membership
</asp:Content>
<asp:Content ID="Main" runat="server" ContentPlaceHolderID="PlaceHolderMain">
<div>
<wssuc:COM_DisplayGroupsUsers ID="COM_DisplayGroupsUsers" runat="server" />
</div>
</asp:Content>
--------------------------------------------------------------------------------------------
The final project structure will look like this:
Step6: Build and deploy the WSP. Go to Site Actions >> Check if both the publishing features have been activated >> Once verified, Activate our groups and users feature >> Navigate to the "Pages" document library >> Upload the "DisplayGroupsUsers.aspx" page which is located at 12 hive >> Templates >> Features >> DisplayGroupsUsers folder. The final custom application page will look this:
Cheers,
--aaroh
Download the source here.
Reference: Creating a Tree View Control WebPart
1 comment:
Hi Aroh,
Nice post.
How do I display users for the whole site collection?
Post a Comment