In this article I will show programmatically how to list all available permissions in a SharePoint site and how to show the details of any permission, in other words name, description, base permission and so on.
I am also showing how to create our own custom permission in SharePoint programmatically.
For this I created Blank SharePoint Solution and mapped it to our SharePoint site. I added the following 2 pages:
- GetAllPermission.aspx (To show all permission)
- AddNewPermission (To add a custom permission).
I deployed the solution and my functionality is as in the following.
To Add a new custom Permission:
Image 1.
After creating a new Permission you can check in the SharePoint Site as in the following:
Image 2.
AddNewPermission.aspx is:
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AddNewPermission.aspx.cs"
Inherits="SP_Permission.Layouts.SP_Permission.AddNewPermission" DynamicMasterPageFile="~masterurl/default.master" %>
<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<table>
<tr>
<td height="10px">
</td>
</tr>
</table>
<table cellpadding="5" cellspacing="5" width="70%" align="center" style="border: 2px solid Green;">
<tr>
<td style="background-color: #@F5F5F5; width: 100%; font-weight: bold; font-size: 12pt;"
colspan="4">
Add New Permission:
</td>
</tr>
<tr>
<td width="25%" align="right">
Permission Name:
</td>
<td align="left">
<asp:TextBox ID="txtName" runat="server" Width="300px"></asp:TextBox>
</td>
</tr>
<tr>
<td width="25%" align="right">
Permission Description:
</td>
<td align="left">
<asp:TextBox ID="txtDesc" runat="server" Width="300px" Height="70px" TextMode="MultiLine"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="4" align="center">
<asp:Button ID="btnAdd" runat="server" OnClick="btnAddPermission_Click" Text="Add Permission" />
</td>
</tr>
</table>
</asp:Content>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
Add New Permission Level
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"
runat="server">
Add New Permission Level
</asp:Content>
AddNewPermission.aspx.cs is:
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace SP_Permission.Layouts.SP_Permission
{
public partial class AddNewPermission : LayoutsPageBase
{
string mySite = "http://localhost:7000";
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnAddPermission_Click(object sender, EventArgs e)
{
using (SPSite site = new SPSite(mySite))
{
using (SPWeb web = site.OpenWeb())
{
SPRoleDefinition roleDefinition = new SPRoleDefinition();
roleDefinition.Name = txtName.Text;
roleDefinition.Description = txtDesc.Text;
roleDefinition.BasePermissions = SPBasePermissions.AddAndCustomizePages |SPBasePermissions.ApplyStyleSheets |
SPBasePermissions.CreateGroups| SPBasePermissions.OpenItems |
SPBasePermissions.EditListItems | SPBasePermissions.ViewListItems |
SPBasePermissions.ViewPages | SPBasePermissions.Open |
SPBasePermissions.ViewFormPages;
web.RoleDefinitions.Add(roleDefinition);
}
}
Response.Redirect("GetAllAvaliablePermission.aspx");
}
}
}
To list all permissions (GetAllAvaliablePermission.aspx):
Image 3.
Select any permission and click on "GetDetail".
Image 4.
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetAllAvaliablePermission.aspx.cs"
Inherits="SP_Permission.Layouts.SP_Permission.GetAllAvaliablePermission" DynamicMasterPageFile="~masterurl/default.master"%>
<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<table>
<tr>
<td height="10px">
</td>
</tr>
</table>
<table cellpadding="5" cellspacing="5" width="70%" align="center" style="border: 2px solid Green;">
<tr>
<td style="background-color: #@F5F5F5; width: 100%; font-weight: bold; font-size: 12pt;"
colspan="4">
All Avaliable Permission:
</td>
</tr>
<tr>
<td>
<asp:ListBox ID="lstAllAvaliableRoles" runat="server" Width="250px" BackColor="#f5f5f5"
Height="200px"></asp:ListBox>
</td>
</tr>
<tr>
<td>
</td>
</tr>
<tr>
<td colspan="4" align="center">
<span style="font-family: Verdana; font-size: 8pt; background-color: #F5F5F5;">(Select a permission
to get details)</span><br />
<asp:Button ID="btnGetdetail" runat="server" OnClick="btnGetDetailPermission_Click"
Text="Get Detail" />
</td>
</tr>
</table>
<table>
<tr>
<td height="10px">
</td>
</tr>
</table>
<table cellpadding="5" cellspacing="5" width="70%" align="center" style="border: 2px solid Green;"
id="permissionDetails" runat="server" visible="false">
<tr>
<td style="background-color: #F5F5F5; width: 100%; font-weight: bold; font-size: 12pt;"
colspan="4">
Selected Permission Detail:
</td>
</tr>
<tr>
<td width="25%" align="right">
Permission Name:
</td>
<td align="left">
<asp:TextBox ID="txtName" runat="server" Width="300px"></asp:TextBox>
</td>
</tr>
<tr>
<td width="25%" align="right">
Permission Description:
</td>
<td align="left">
<asp:TextBox ID="txtDesc" runat="server" Width="300px" Height="70px" TextMode="MultiLine"></asp:TextBox>
</td>
</tr>
<tr>
<td width="25%" align="right">
Base Permission Details:
</td>
<td align="left">
<asp:TextBox ID="txtBasePer" runat="server" Width="300px" Height="70px" TextMode="MultiLine"></asp:TextBox>
</td>
</tr>
</table>
</asp:Content>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
SP Permission
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"
runat="server">
SP Permission
</asp:Content>
GetAllAvaliablePermission.aspx.cs
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace SP_Permission.Layouts.SP_Permission
{
public partial class GetAllAvaliablePermission : LayoutsPageBase
{
string mySite = "http://localhost:7000";
string strValue = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
permissionDetails.Visible = false;
BindAllPermission();
}
}
protected void BindAllPermission()
{
try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(mySite))
{
using (SPWeb web = site.OpenWeb())
{
string spreturnUser = string.Empty;
try
{
int i = 0;
foreach (SPRoleDefinition role in web.RoleDefinitions)
{
i++;
lstAllAvaliableRoles.Items.Add(i + ": " + role.Name);
}
}
catch (Exception)
{
}
}
}
});
}
catch (Exception ex)
{
}
}
protected void btnGetDetailPermission_Click(object sender, EventArgs e)
{
permissionDetails.Visible = true;
using (SPSite site = new SPSite(mySite))
{
using (SPWeb web = site.OpenWeb())
{
SPRoleDefinition role = web.RoleDefinitions[lstAllAvaliableRoles.SelectedValue.ToString().Split(':')[1].ToString().Trim()];
txtName.Text = role.Name;
txtDesc.Text = role.Description;
SPBasePermissions spPer = role.BasePermissions;
txtBasePer.Text = spPer.ToString();
}
}
}
}
}