<%@ Register TagPrefix="ec" Namespace="ASPNETExpert.WebControls" Assembly="ASPNETExpert.WebControls" %>
<%@ Register TagPrefix="ecd" TagName="Footer" Src="../../Controls/Footer.ascx"%>
<%@ Register TagPrefix="ecd" TagName="Header" Src="../../Controls/Header.ascx"%>
<%@ Register TagPrefix="ecd" Namespace="ASPNETExpert.WebControls.DemoControls" Assembly="ASPNETExpert.WebControls.DemoControls" %>
<%@ Page language="c#" Inherits="ASPNETExpert.WebControls.Demo.Menu.Programming.AccessControl._default" CodeFile="default.aspx.cs" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>ASP.NET Menu : ExpertMenu Demo : Add / Move / Remove / Disable items</title>
<link href="../../style.css" type="text/css" rel="stylesheet">
</HEAD>
<body xmlns:ec="urn:http://aspnetexpert.com/ExpertControls.xsd">
<form id="Form1" method="post" runat="server">
<ecd:Header runat="server" ID="Header1"></ecd:Header>
<ec:ExpertMenu runat="server" id="ExpertMenu1" Skin="WindowsXPGray" PostBackOnClick="true" EnableViewState="true">
<TopGroup Look-Orientation="Horizontal">
<Items>
<ec:MenuItem Text="Home" />
<ec:MenuItem Text="Services" PostBackOnClick="False">
<SubMenu>
<Items>
<ec:MenuItem Text="Software products" />
<ec:MenuItem Text="Business consulting" />
<ec:MenuItem Text="Financing" AllowRoles="Manager,Sales,Employee" />
<ec:MenuItem Text="Infrastructure services" />
</Items>
</SubMenu>
</ec:MenuItem>
<ec:MenuItem Text="Clients" PostBackOnClick="False">
<SubMenu>
<Items>
<ec:MenuItem Text="View clients list" AllowRoles="Manager,Sales" />
<ec:MenuItem Text="View client's account" AllowRoles="Manager,Sales" />
<ec:MenuItem Text="View client's report" AllowRoles="Manager" />
<ec:MenuItem Text="Submit client's report" AllowRoles="Manager" />
</Items>
</SubMenu>
</ec:MenuItem>
<ec:MenuItem Text="My account" AllowRoles="Manager,Sales,Employee" />
</Items>
</TopGroup>
</ec:ExpertMenu>
<br>
<ec:ExpertPath runat="server" ExpertMenuId="ExpertMenu1" ID="ExpertPath1">
<ItemLook>
<InitLook ForeColor="Gray" Font-Name="Verdana,Arial,Helvetica,sans-serif" Font-Size="10px" Font-Bold="True" Padding-All="2px" Cursor="Pointer" />
<HoveredLook ForeColor="#5B73A6" Font-Name="Verdana,Arial,Helvetica,sans-serif" Font-Size="10px" Font-Bold="True" Font-Decoration="Underline" Cursor="Pointer" />
<DisabledLook ForeColor="Silver" Cursor="Default" />
</ItemLook>
<SeparatorTextLook ForeColor="Gray" Font-Name="Verdana,Arial,Helvetica,sans-serif" Font-Size="10px" Font-Bold="True" Padding-Left="4px" Padding-Right="4px" />
</ec:ExpertPath>
<br>
<asp:RadioButtonList Runat="server" AutoPostBack="True" ID="RolesList" RepeatDirection="Horizontal" CssClass="exampledesc" onselectedindexchanged="RolesList_SelectedIndexChanged"></asp:RadioButtonList>
<asp:CheckBox Runat="server" ID="HideRoleDisabledItems" Text="HideRoleDisabledItems" AutoPostBack="True"
CssClass="exampledesc" oncheckedchanged="HideRoleDisabledItems_CheckedChanged"></asp:CheckBox>
<br>
<ecd:DescriptionView runat="server" IconUrl="../../images/kv.gif" ID="Descriptionview1">
<ecd:Description runat="server" ID="Description1"><b>ExpertMenu</b> can enable / disable menu items
based on allowed security roles specified for an item.</ecd:Description>
<ecd:Description runat="server" ID="Description2">To protect a menu item from unauthorized access just
define an allowed roles list with <B>AllowRoles</B> property. Only authorized persons will have access
to that item.</ecd:Description>
<ecd:Description runat="server" ID="Description3"><b>ExpertMenu</b> checks roles with standard ASP.NET
<b>System.Security.Principal.IPrincipal.IsInRole()</b> call and takes IPrincipal from
<b>Context.User</b> property.</ecd:Description>
<ecd:Description runat="server" ID="Description4">You can totally hide the items that are not allowed
for the current user's security role with <B>HideRoleDisabledItems</B> property.</ecd:Description>
<ecd:Description runat="server" ID="Description5">Note that <B>ExpertPath</B> control enables / disables
(hides) items the same way as its host menu.</ecd:Description>
</ecd:DescriptionView>
<ec:CodeViewTab id="CodeViewTab1" runat="server" Class="Tab" TabClass="TabContent" ItemClass="TabItem"
ItemOverClass="TabItemOver" ItemSelectedClass="TabItemSelected" ImagesBaseUrl="../../images/tab/"
SeparatorImage="separator.gif">
<ec:TabItem runat="server" Text="aspx">
<pre class="aspcode">
<ecd:SyntaxHighlight runat="server" ContentType="ASPX" OutputFile="default.aspx" />
</pre>
</ec:TabItem>
<ec:TabItem runat="server" Text="C#">
<pre class="aspcode">
<ecd:SyntaxHighlight runat="server" ContentType="C#" OutputFile="default.aspx.cs" />
</pre>
</ec:TabItem>
<ec:TabItem runat="server" Text="VB">
<pre class="aspcode">
<ecd:SyntaxHighlight runat="server" ContentType="VB" OutputFile="default_vb.aspx.vb" />
</pre>
</ec:TabItem>
</ec:CodeViewTab>
<ecd:Footer runat="server" ID="Footer1"></ecd:Footer>
</form>
</body>
</HTML>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Security.Principal;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace ASPNETExpert.WebControls.Demo.Menu.Programming.AccessControl
{
///
/// Summary description for _default.
///
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
RolesList.Items.Add("None");
RolesList.Items.Add("Manager");
RolesList.Items.Add("Employee");
RolesList.Items.Add("Sales");
RolesList.SelectedIndex = 0;
}
SetPrincipal();
}
private void SetPrincipal()
{
if(RolesList.SelectedValue == null)
return;
string[] roles = new string[1]{ RolesList.SelectedValue };
Context.User = new GenericPrincipal(new FormsIdentity(new FormsAuthenticationTicket("user name", false, 60)), roles);
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
}
#endregion
protected void RolesList_SelectedIndexChanged(object sender, System.EventArgs e)
{
SetPrincipal();
}
protected void HideRoleDisabledItems_CheckedChanged(object sender, System.EventArgs e)
{
ExpertMenu1.HideRoleDisabledItems = HideRoleDisabledItems.Checked;
}
}
}
Imports System.Security.Principal
Imports System.Web.Security
Namespace ASPNETExpert.WebControls.DemoVB.Programming.AccessControl
Partial Class default_vb
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
RolesList.Items.Add("None")
RolesList.Items.Add("Manager")
RolesList.Items.Add("Employee")
RolesList.Items.Add("Sales")
RolesList.SelectedIndex = 0
End If
Call SetPrincipal()
End Sub
Private Sub SetPrincipal()
If RolesList.SelectedValue Is Nothing Then
Exit Sub
End If
Dim roles() As String = New String() {RolesList.SelectedValue}
Context.User = New GenericPrincipal(New FormsIdentity(New FormsAuthenticationTicket("user name", False, 60)), roles)
End Sub
Private Sub RolesList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RolesList.SelectedIndexChanged
Call SetPrincipal()
End Sub
Private Sub HideRoleDisabledItems_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HideRoleDisabledItems.CheckedChanged
ExpertMenu1.HideRoleDisabledItems = HideRoleDisabledItems.Checked
End Sub
End Class
End Namespace