2011-04-12 7 views
0

로컬 인트라넷에 대한 메뉴 및 사용자 데이터를 저장하는 oracle 데이터베이스가 있습니다.사용자 기준으로 다른 asp : 메뉴

데이터에는 사용자가 어떤 페이지에 액세스 할 수 있는지가 포함됩니다.

원래 StaticSiteMapProvider 클래스를 확장 한 클래스를 만들었지 만 테스트 환경에 들어가면이 위치가 전체 사이트에 대해 (사용자별로가 아니라) 캐시 된 것으로 나타났습니다. 다양한 포럼에서 온라인으로 읽은 후, SiteMapProvider를 상속 받아야한다고 제안되었는데, 이는 SiteMapProvider와 ASP의 분리 된 인스턴스를 사용자가 가질 수 있도록 허용 할 것이기 때문입니다. 그러나 이것은 여전히 ​​문제를 해결하지 못했습니다 .

현재 asp : menu를 확인하고 사용자 지정 사이트 맵 공급자를 데이터 원본으로 사용하는 사용자 정의 컨트롤이 있습니다.

누구든지 데이터베이스 권한으로 인해 사용자별로 메뉴를 표시 할 수있는 방법을 제안 할 수 있습니까?

또한 메뉴 전체를 모든 사용자에게 표시해야합니다. 메뉴 노드를 클릭 한 후에야 해당 페이지/노드에 대한 액세스 권한이 있는지 여부를 알 수 있습니다.

감사

+0

동적으로 메뉴를 만들고 싶습니다. – Nighil

+0

@NDC : 기본적으로 ASP 역할을 사용하지 않습니다. – jpgooner

답변

0

당신이 나타납니다 어떤 메뉴를 정의하는 사이트 맵에 역할을 사용할 수있다.

+0

감사합니다. Davis.하지만이 코드를 작성한 개발자는 역할을 사용하지 않기로 결정하여 메뉴 항목을 기반으로 자신의 페이지 인증을 구현했습니다. 및 sitemapnodes – jpgooner

+0

@jpgooner, 'IsAccessibleToUser' 메서드를 재정의하십시오 - 내 대답을 참조하십시오. – VinayC

0

두 가지가 있습니다. 노드의 정적 컬렉션이 있고 사용자 액세스 가능성을 기준으로 노드를 표시하거나 숨기려면 IsAccessibleToUser 메서드를 재정 의하여 현재 노드 (지정된 HttpContext에서 액세스 할 수 있음)에 해당 노드가 있는지 확인해야합니다.

노드 수집/계층이 사용자 단위로 변경되는 경우 BuildSiteMap을 재정 의하여 현재 사용자의 다른 노드를로드하십시오. 그러나 StaticSiteMapProvider가이 경우에 올바른 기본 클래스이면 약간 의문입니다. 아마도 SiteMapProvider에서 우선 적용해야합니다.

+0

사용자 지정 사이트 맵 공급자 클래스는 원래 staticSiteMapProvider를 재정의했습니다. 그러나이 태그를 Overrider SiteMapProvider로 변경했지만 여전히 기쁨이 없습니다. 또한 모든 노드를 표시하려고합니다. – jpgooner