3

System.Web.XmlSiteMapProvider을 상속하는 자체 SiteMapProvider를 롤백합니다.XmlSiteMapProvider는 사용자가 지정된 역할을 수행하는 방법을 어떻게 확인합니까?

나는 siteMapNode의 재산 roles에 지정된 역할로 사용자를 확인하는 논리를 무시하려면 :

<siteMapNode url="Add.aspx?type=user" title="Add user" roles="admin" /> 

내가 어떻게 할 수 있습니까? 어느 클래스의 멤버가 securityTrimmingEnabled="true" 일 경우 XmlSiteMapProvider가이를 확인하기 위해 호출합니까?

답변

3

abatishchev는 가깝지만 명확한 안내를 제공하지 않습니다. 기본 호출은 기본 asp.net 액세스 제어 규칙을 적용합니다. 맞춤 규칙이있는 경우 단순히 결정을 내리고 부울을 반환하십시오. 누군가가 원하는 경우

public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node) 
{ 
    // use the properties of the context and node to determine accessibility. 

    // only call base if you do not want to apply your custom rules 
    // return base.IsAccessibleToUser(context, node); 
} 
+0

를 추가 할 수 있습니다 사이트 맵에

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true"> <providers> <clear/> <add name="XmlSiteMapProvider" description="Default Sitemap Provider" type="System.Web.XmlSiteMapProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true"/> </providers> </siteMap> 

다음의 Web.config에 이것을 추가하는 것입니다 내 질문은 유감스럽게도 사용자를 한동안 끌어 들이지 않았으므로 솔루션을 직접 찾아서 다행히 해내 야했습니다. 당신은 내가 동시에 OP이고 단일 대답이 나도다고 말할 수 없습니다. 자신의 대답을 수락하기 때문에 명성을 가져 오지 않기 때문에, 나는 당신의 것을 받아 들일 수있어서 기쁩니다 :) 고마워요! – abatishchev

+0

@aba - 사실, 나는 OP와 대답이 같은 사람에게서 나왔다는 것을 알지 못했다. 단지 지침이 좀 더 분명 할 수 있다는 것이다. 당신이 그것을 이해하고 기쁘다면 기꺼이 도와 드리겠습니다. –

+0

좋아, 나는 IsAccessibleToUser를 재정의하여 자신의 논리를 적용하여 검사 할 수 있습니다. 하지만 원래 * IsAccessibleToUser는 어떻게 작동합니까? 리플렉터는'context.User.IsInRole (role)'을 체크한다. 역할을'IPrincipal'으로 설정하는 방법을 알고 있습니까? – abatishchev

1
public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node) 
{ 
    var roles = node.Roles; // here it is! 
    return base.IsAccessibleToUser(context, node); 
} 
0

가장 쉬운이 하나의 대답은 당신이 속성 역할 = "뭔가"

관련 문제