저는 새로운 ASP.NET 개발자입니다. 지금은 응용 프로그램의 사용자 역할 메커니즘을 연구하고 있습니다. 특정 그룹에 속한 사람들 만 응용 프로그램에 액세스 할 수 있습니다 ( ). 그런 다음 시스템은 각 사용자의 역할을 확인해야합니다. 일부 메뉴 옵션은 역할에 따라 으로 숨겨집니다. 사용자가 시스템에 액세스 할 수없는 그룹에 속한 경우 사용자는 '액세스 거부'페이지로 리디렉션되어야합니다. '액세스 거부'페이지를 포함한 모든 페이지는 마스터 페이지를 사용하여 동일한 모양과 느낌을 갖습니다.이 asp.net 응용 프로그램의 마스터 페이지에서 사용자 액세스 검사를 수정하는 방법은 무엇입니까?
ASP.NET 메뉴 컨트롤을 사용하면서 사용자 역할에 따라 메뉴 항목 옵션을 숨기는 방법을 작성했습니다. 그러나 나는 여전히 시스템에 액세스 할 수없는 그룹에 속한 사용자를 '액세스가 거부 됨'페이지로 리디렉션하는 데 어려움을 겪고있는 입니다. 내 다음 코드를 디버깅 할 때 액세스를 확인하고 메뉴 항목을 설정하는 무한 루프를 통해 디버거를 사용할 때.
어떻게하면이 문제를 해결할 수 있습니까? MasterPage.master의
코드 숨김 :
protected void Page_Init(object sender, EventArgs e)
{
MenuAccess();
}
protected void MenuAccess()
{
if (HasAccess())
{
if (!Helper.IsAdmin(username))
{
MenuItemCollection menuItems = NavigationMenu.Items;
RemoveMenuItemByValue(menuItems, "movies");
}
if (!Helper.IsSupport(username))
{
MenuItemCollection menuItems = NavigationMenu.Items;
RemoveMenuItemByValue(menuItems, "music");
}
}
else
{
Response.Redirect("~/Pages/Error/AccessDenied.aspx");
return;
}
}
protected bool HasAccess()
{
bool hasAccess = false;
//General access to the system by the group code
if (Helper.HasAccess(orgCode))
{
hasAccess = true;
}
return hasAccess;
}
public static void RemoveMenuItemByValue(MenuItemCollection items, String value)
{
MenuItem itemToRemove = null;
//Breadth first, look in the collection
foreach (MenuItem item in items)
{
if (item.Value == value)
{
itemToRemove = item;
break;
}
}
if (itemToRemove != null)
{
items.Remove(itemToRemove);
return;
}
//Search children
foreach (MenuItem item in items)
{
RemoveMenuItemByValue(item.ChildItems, value);
}
}
당신이 코드로 이것을 설명시겠습니까? –
@TechnologyLover 아마 제공되는 코드 스 니펫이 작동하지 않지만 비슷한 것을 할 것입니다 ... – hatcyl
저는 아직 새로운 개발자로서 생각을하지 못했습니다. 제 코드에서 저를 도울 수 있습니까? –