Aspdotnet-Suresh

aspdotnet-suresh offers C#.net articles and tutorials,csharp dot net,asp.net articles and tutorials,VB.NET Articles,Gridview articles,code examples of asp.net 2.0 /3.5,AJAX,SQL Server Articles,examples of .net technologies

Assign roles to user in asp.net membership

Jan 5, 2012
Introduction:

In this article I will explain how to assign roles to users and remove roles from users and how populate user roles based on username selection in asp.net membership.

Description:

In previous post I explained clearly about create users using CreateUserWizard in asp.net membership or programmatically insert user details in membership and create or removes roles in asp.net membership. Now I will explain how to populate roles based on username selection and assign or remove roles to users based on username.


Here I am using above concepts to create users and create new roles in our project setup membership database in our SQL Server and insert user details in database.

After completion of database setup, user accounts creation and roles creation open visual studio and create new web application after that open aspx page and write following code


<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Assign and Delete Roles to User in asp.net Membership</title>
<style type="text/css">
.GridviewDiv {font-size: 100%; font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helevetica, sans-serif; color: #303933;}
Table.Gridview{border:solid 1px #df5015;}
.Gridview th{color:#FFFFFF;border-right-color:#abb079;border-bottom-color:#abb079;padding:0.5em 0.5em 0.5em 0.5em;text-align:center}
.Gridview td{border-bottom-color:#f0f2da;border-right-color:#f0f2da;padding:0.5em 0.5em 0.5em 0.5em;}
.Gridview tr{color: Black; background-color: White; text-align:left}
:link,:visited { color: #DF4F13; text-decoration:none }
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="GridviewDiv">
<table align="center">
<tr>
<td> <b>Select User:</b> </td>
<td><asp:DropDownList ID="ddlUsers" runat="server" AutoPostBack="true" onselectedindexchanged="ddlUsers_SelectedIndexChanged"/></td>
</tr>
<tr>
<td colspan="2">
<asp:GridView ID="gvRoles" runat="server" CssClass="Gridview" AutoGenerateColumns="false">
<HeaderStyle BackColor="#df5015" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkRole" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField  HeaderText="Role Name">
<ItemTemplate>
<asp:Label ID="lblRole" runat="server" Text="<%#Container.DataItem %>"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
<tr>
<td colspan="2"><asp:Button ID="btnAssign" runat="server" Text="Assign or UnAssign" onclick="btnAssign_Click" /></td>
</tr>
</table>
<div align="center">
<asp:Label ID="lblSuccess" runat="server" Font-Bold="true"/>
<br />
<asp:Label ID="lblError" runat="server" Font-Bold="true"/>
</div>
</div>
</form>
</body>
</html>
Now open code behind file and add following namespaces

C# Code


using System;
using System.Drawing;
using System.Web.Security;
using System.Web.UI.WebControls;
After add namespaces write the following code 


protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindUserDetails();
BindRoles();
}
}
// Bind User Names to Dropdownlist
protected void BindUserDetails()
{
ddlUsers.DataSource = Membership.GetAllUsers();
ddlUsers.DataTextField = "UserName";
ddlUsers.DataValueField = "UserName";
ddlUsers.DataBind();
ddlUsers.Items.Insert(0,new ListItem("--Select User--", "0"));
}
// Bind Roles to Gridview
protected void BindRoles()
{
gvRoles.DataSource = Roles.GetAllRoles();
gvRoles.DataBind();
}
// This event is used to assign roles to particular user
protected void btnAssign_Click(object sender, EventArgs e)
{
string userName = ddlUsers.SelectedItem.Text;
string[] userRoles = Roles.GetRolesForUser(userName);
string errorMessage = string.Empty;
string successMessage = string.Empty;
string roleName = string.Empty;
int i = 0;
int j = 0;
foreach(GridViewRow gvrow in gvRoles.Rows)
{
CheckBox chk = (CheckBox)gvrow.FindControl("chkRole");
Label lbl = (Label)gvrow.FindControl("lblRole");
roleName = lbl.Text;
if(chk.Checked)
{
int index = Array.IndexOf(userRoles, roleName);
if (index == -1)
{
Roles.AddUserToRole(userName, roleName);
successMessage += roleName + ", ";
j++;
}
}
else
{
int index = Array.IndexOf(userRoles, roleName);
if (index > -1)
{
// Remove the user from the role
Roles.RemoveUserFromRole(userName, roleName);
errorMessage += roleName + ", ";
i++;
}
}
}
if(errorMessage!=string.Empty)
{
if(i>1)
{
lblError.Text = userName+ " was removed from roles " +errorMessage.Substring(0, errorMessage.Length - 2);
}
else
{
lblError.Text = userName + " was removed from role " + errorMessage.Substring(0, errorMessage.Length - 2);
}
lblError.ForeColor = Color.Red;
}
else
{
lblError.Text = string.Empty;
}
if (successMessage != string.Empty)
{
if (j > 1)
{
lblSuccess.Text = successMessage.Substring(0, successMessage.Length - 2) + " roles assigned to " + userName;
}
else
{
lblSuccess.Text = successMessage.Substring(0, successMessage.Length - 2) + " role assigned to " + userName;
}
lblSuccess.ForeColor = Color.Green;
}
else
{
lblSuccess.Text = string.Empty;
}
}
// This event is used to populate checkboxes based on roles for particular user
protected void ddlUsers_SelectedIndexChanged(object sender, EventArgs e)
{
lblSuccess.Text = string.Empty;
lblError.Text = string.Empty;
string userName = ddlUsers.SelectedItem.Text;
string[] userRoles = Roles.GetRolesForUser(userName);
string rolename = string.Empty;
foreach (GridViewRow gvrow in gvRoles.Rows)
{
CheckBox chk = (CheckBox) gvrow.FindControl("chkRole");
Label lbl = (Label)gvrow.FindControl("lblRole");
rolename = lbl.Text;
int index = Array.IndexOf(userRoles, rolename);
if (index >-1)
{
chk.Checked = true;
}
else
{
chk.Checked = false;
}
}
}
VB.NET Code


Imports System.Drawing
Imports System.Web.Security
Imports System.Web.UI.WebControls

Partial Class VBAssignRoles
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not IsPostBack Then
BindUserDetails()
BindRoles()
End If
End Sub
' Bind User Names to Dropdownlist
Protected Sub BindUserDetails()
ddlUsers.DataSource = Membership.GetAllUsers()
ddlUsers.DataTextField = "UserName"
ddlUsers.DataValueField = "UserName"
ddlUsers.DataBind()
ddlUsers.Items.Insert(0, New ListItem("--Select User--", "0"))
End Sub
' Bind Roles to Gridview
Protected Sub BindRoles()
gvRoles.DataSource = Roles.GetAllRoles()
gvRoles.DataBind()
End Sub
' This event is used to assign roles to particular user
Protected Sub btnAssign_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim userName As String = ddlUsers.SelectedItem.Text
Dim userRoles As String() = Roles.GetRolesForUser(userName)
Dim errorMessage As String = String.Empty
Dim successMessage As String = String.Empty
Dim roleName As String = String.Empty
Dim i As Integer = 0
Dim j As Integer = 0
For Each gvrow As GridViewRow In gvRoles.Rows
Dim chk As CheckBox = DirectCast(gvrow.FindControl("chkRole"), CheckBox)
Dim lbl As Label = DirectCast(gvrow.FindControl("lblRole"), Label)
roleName = lbl.Text
If chk.Checked Then
Dim index As Integer = Array.IndexOf(userRoles, roleName)
If index = -1 Then
Roles.AddUserToRole(userName, roleName)
successMessage += roleName & ", "
j += 1
End If
Else
Dim index As Integer = Array.IndexOf(userRoles, roleName)
If index > -1 Then
' Remove the user from the role
Roles.RemoveUserFromRole(userName, roleName)
errorMessage += roleName & ", "
i += 1
End If
End If
Next
If errorMessage <> String.Empty Then
If i > 1 Then
lblError.Text = userName & " was removed from roles " & errorMessage.Substring(0, errorMessage.Length - 2)
Else
lblError.Text = userName & " was removed from role " & errorMessage.Substring(0, errorMessage.Length - 2)
End If
lblError.ForeColor = Color.Red
Else
lblError.Text = String.Empty
End If
If successMessage <> String.Empty Then
If j > 1 Then
lblSuccess.Text = successMessage.Substring(0, successMessage.Length - 2) & " roles assigned to " & userName
Else
lblSuccess.Text = successMessage.Substring(0, successMessage.Length - 2) & " role assigned to " & userName
End If
lblSuccess.ForeColor = Color.Green
Else
lblSuccess.Text = String.Empty
End If
End Sub
' This event is used to populate checkboxes based on roles for particular user
Protected Sub ddlUsers_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
lblSuccess.Text = String.Empty
lblError.Text = String.Empty
Dim userName As String = ddlUsers.SelectedItem.Text
Dim userRoles As String() = Roles.GetRolesForUser(userName)
Dim rolename As String = String.Empty
For Each gvrow As GridViewRow In gvRoles.Rows
Dim chk As CheckBox = DirectCast(gvrow.FindControl("chkRole"), CheckBox)
Dim lbl As Label = DirectCast(gvrow.FindControl("lblRole"), Label)
rolename = lbl.Text
Dim index As Integer = Array.IndexOf(userRoles, rolename)
If index > -1 Then
chk.Checked = True
Else
chk.Checked = False
End If
Next
End Sub
End Class
Here don’t forgot to set database connection settings in web.config 

First set the connectionstring like this 

<connectionStrings>
<add name="dbconnection" connectionString="Data Source=SureshDasari;Initial Catalog=AspMembership;Integrated Security=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
After that write the following code in system.web section

<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="dbconnection" applicationName="SampleApplication"/>
</providers>
</membership>
<profile>
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="dbconnection" applicationName="SampleApplication"/>
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="dbconnection" applicationName="SampleApplication"/>
</providers>
</roleManager>
Now run your application and check your output 

Demo

 

If you enjoyed this post, please support the blog below. It's FREE!

Get the latest Asp.net, C#.net, VB.NET, jQuery, Plugins & Code Snippets for FREE by subscribing to our Facebook, Twitter, RSS feed, or by email.

subscribe by rss Subscribe by RSS subscribe by email Subscribe by Email

8 comments :

dbTechnical said...

Very Very Thanks Dear All artical is very usefull
New Entire Devepoper.

Imtiaz said...

Thank You So much, how to change Isapproved in membership table from true to false instead of delete user.

pratibha said...

thanks for this artical its very nice.but I want role wise authentication for access menu like for user and admin permissions.

Affiliate Marketing said...

thanks suresh for your valuable articles

advicer said...

Suresh also attach the download test file .. this my advice,

Regards.

Kapil Rajput said...

thnx for the artical

Unknown said...

Thank you Sir for ur tutorial...Sir i want to know the details of last userregistered in membership database...Please help me ..thanks..

DIWAS POUDEL said...

Thank you ...God bless you!!!!! :)

Give your Valuable Comments

Note: Only a member of this blog may post a comment.

© 2015 Aspdotnet-Suresh.com. All Rights Reserved.
The content is copyrighted to Suresh Dasari and may not be reproduced on other websites without permission from the owner.