3

我滾動我自己的SiteMapProvider繼承System.Web.XmlSiteMapProviderXmlSiteMapProvider如何檢查用戶是否處於指定角色?

我想重寫檢查用戶是在的SiteMapNode的財產roles指定角色的邏輯:

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

我怎麼能這樣做? XmlSiteMapProvider調用哪個類的成員來檢查securityTrimmingEnabled="true"

回答

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

不幸的是,我的問題在一段時間內沒有吸引任何用戶,所以我不得不自己找到解決方案,幸運的是做到了。你不能提到我是同時做的,單一的答案也是我的。因爲接受自己的答案沒有聲譽,我很高興接受你的一個:)謝謝! – abatishchev 2010-05-22 15:23:48

+0

@aba - 實際上,我沒有注意到OP和答案來自同一個人,只是指導可以更清楚一點。很高興你知道了,很高興我能幫忙,如果我做到了。 – 2010-05-22 15:36:19

+0

好吧,我可以重寫'IsAccessibleToUser'來應用自己的邏輯來檢查。但是*原* * IsAccessibleToUser如何工作?反射器表明它檢查'context.User.IsInRole(role)'。你知道如何設置角色到'IPrincipal'嗎? – abatishchev 2010-05-23 13:12:55

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

最簡單的,如果有人想在這一個答案是它添加到你的web.config

<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> 

然後在你的網站地圖,你可以添加屬性的角色=「東西」