Показать / скрыть пользовательские пункты меню на основе файла 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 в противном случае.