Я бы обычно использовал карту сайта и настройки безопасности. Каждый siteMapNode имеет атрибут «role», который указывает, каким ролям разрешено видеть ссылку в меню. * используется для всех ролей или вы можете ввести список ролей через запятую. например,
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<siteMapNode title="Home" description="Home"
url="~/default.aspx" roles="*" >
</siteMapNode>
<siteMapNode title="Organization" description="Organization"
url="~/Organization.aspx" roles="Admin" >
</siteMapNode>
<siteMapNode title="Message" description="Message"
url="~/Organization.aspx" roles="Admin, User" >
</siteMapNode>
</siteMap>
и т.д.
Затем вы можете включить безопасность безопасности в вашем файле web.config:
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<add name="XmlSiteMapProvider"
description="Default Site Map Provider"
type="System.Web.XmlSiteMapProvider"
siteMapFile="Web.sitemap"
securityTrimmingEnabled="true" />
</providers>
</siteMap>
Все, что вам нужно сделать, это установить источник данных вашего меню asp на карту сайта. Более подробную информацию можно найти здесь: http://msdn.microsoft.com/en-us/library/305w735z.aspx и здесь: http://msdn.microsoft.com/en-us/library/ms178429(v=vs.80).aspx
Мне нравится этот подход, потому что добавить новый элемент меню на основе ролей намного проще. Вам не нужно вручную проверять роль в коде, которая в конечном итоге, вероятно, окажется громоздкой инструкцией if.