Показать / скрыть пользовательские пункты меню на основе файла Roles/Web.sitemap

У меня есть пользовательское меню, которое использует стандартную карту сайта asp.net. Это работает хорошо, но некоторые из моих страниц динамически генерируются при переписывании URL, поэтому они не помещаются в XML-файл карты сайта. На данный момент я накатил собственное решение, которое показывает / скрывает пункты меню через класс CSS и программную проверку роли, в которой находится пользователь. Это работает нормально, пока я не посещаю динамическую страницу, которая не существует в файле карты сайта. Я пробовал атрибут "role" в файле карты сайта с усечением безопасности, но он не работает, потому что у меня есть пользовательское меню.

Есть ли способ, которым я мог бы использовать атрибут ролей в файле карты сайта, чтобы показать / скрыть пункты меню для моего пользовательского элемента управления ниже, даже если некоторые страницы отсутствуют в карте сайта? Мое меню управления ниже...

<div class="menu">
<ul>
    <asp:Repeater ID="rpt" runat="server" DataSourceID="smdsMenuPrimary" 
        EnableViewState="False">
        <ItemTemplate>                
            <li class="<%#GetDisplayClass((SiteMapNode)Container.DataItem)%>"><a href='<%# ((SiteMapNode)Container.DataItem).Url %>'><%# ((SiteMapNode)Container.DataItem).Title %></a></li>                
        </ItemTemplate>
    </asp:Repeater>
</ul>

1 ответ

Вы можете использовать UrlAuthorizationModule.CheckUrlAccessForPrincipal(path) для проверки каждого URL-адреса из карты сайта - этот метод возвращает true, если у пользователя есть доступ к пути (файлу или папке), и false в противном случае.

Другие вопросы по тегам