Я новый разработчик веб-форм ASP.NET, и сейчас я боюсь скрыть и показать элементы управления меню ASP.NET на основе роли пользователя. Роли определяются мной в базе данных и на основе результата проверки роли пользователя система должна отображать или скрывать некоторые элементы меню.Как устранить эту проблему с помощью элемента управления ASP.NET?
У меня есть следующий элемент управления ASP.NET меню в мастер-странице:
<asp:Menu ID="Menu" runat="server" PathSeparator="," Orientation="Horizontal" EnableViewState="false">
<Items>
<asp:MenuItem Text="Home" NavigateUrl="~/Pages/Default.aspx" Value="home"></asp:MenuItem>
<asp:MenuItem Text="Sheet" NavigateUrl="~/Pages/Sheet.aspx" Value="sheet"></asp:MenuItem>
<asp:MenuItem Text="Test" NavigateUrl="~/Pages/Test.aspx" Value="test"></asp:MenuItem>
</Items>
</asp:Menu>
И в отделенного кода на главной странице я делаю следующую логику:
protected void MenuAccess()
{
if(Acccess.HasAccess(username))
{
if(Access.IsAdmin(username))
{
SetMenuItemUrl("sheet", "~/Pages/Sheet.aspx?UserId=");
HideMenuItem("test");
}
if(Access.IsSupport(username))
{
SetMenuItem("test");
}
}
}
protected void HideMenuItem(string valuePath)
{
SetMenuItem(valuePath, false, null);
}
protected void SetMenuItemUrl(string valuePath, string url)
{
SetMenuItem(valuePath, true, url);
}
protected void SetMenuItem(string valuePath, bool visible, string url)
{
var item = Menu.FindItem(valuePath);
if (item != null)
{
if (url != null)
item.NavigateUrl = url;
if (visible == false)
{
if (valuePath.LastIndexOf(',') < 0)
Menu.Items.Remove(item);
else
{
MenuItem parent = Menu.FindItem(valuePath.Substring(0, valuePath.LastIndexOf(',')));
parent.ChildItems.Remove(item);
}
}
}
}
Однако , если у пользователя две роли: администратор и поддержка, то элемент меню со значением «test» не будет отображаться, и я не знаю почему. Не могли бы вы помочь мне с этим?
Поскольку вы скрываете, если пользователь является администратором - HideMenuItem ("test"); – malkam
@malkam, не могли бы вы рассказать мне, что я должен делать? –