Как XmlSiteMapProvider проверяет, чтобы пользователь был в указанной роли? - PullRequest
3 голосов
/ 22 мая 2010

Я запускаю свой собственный SiteMapProvider, наследующий System.Web.XmlSiteMapProvider.

Я хочу переопределить логику проверки пользователя на роль, указанную в свойстве siteMapNode roles:

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

Как я могу это сделать? Член какого класса вызывает XmlSiteMapProvider, чтобы проверить, что если securityTrimmingEnabled="true"?

Ответы [ 3 ]

3 голосов
/ 22 мая 2010

Абатищев близко, но не дает четкого руководства.Вызывающая база будет применять правила контроля доступа 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);
}
1 голос
/ 22 мая 2010
public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
{
     var roles = node.Roles; // here it is!
     return base.IsAccessibleToUser(context, node);
}
0 голосов
/ 25 июня 2013

Проще всего, если кто-то хочет получить ответ на этот вопрос, это добавить его в свой 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>

тогда в вашей карте сайта вы можете добавить атрибут role = "кое-что"

...