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:

  1. GetAllPermission.aspx (To show all permission)
  2. AddNewPermission (To add a custom permission).

I deployed the solution and my functionality is as in the following.

To Add a new custom Permission:

Sharepoint custom Permission

Image 1.

After creating a new Permission you can check in the SharePoint Site as in the following:

New Permission in SharePoint Site

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):

ToListAllPermission


Image 3.

Select any permission and click on "GetDetail".

Select any permission

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

}

}

}

}

}