powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
9 сообщений из 9, страница 1 из 1
Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
    #37508934
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
исходя из роли пользователя и прав этой роли. Потестил на своей учетке - все нормально. Показывает как надо.
Попросил пользователя с урезанными правами зайти на сайт - а у него меню и карта сайта как-будто у него права как у меня.
Т.е. это дело кэшируется. Как это отключить?

Спасибо
...
Рейтинг: 0 / 0
Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
    #37508998
Фотография n_string
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Posmotri rabochij primer:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<div id="n">
    <ul>
        <asp:Repeater runat="server" ID="rptMenu" DataSourceID="smdsDefaultSiteMap" OnItemDataBound="rptMenu_ItemDataBound"
            EnableViewState="False">
            <ItemTemplate>
                <li>
                    <asp:HyperLink ID="hplItem" runat="server" Visible="false" Text='<%# Eval("Title") %>' NavigateUrl='<%# Eval("Url") %>'></asp:HyperLink>
                    <asp:Label ID="lblItem" Visible="false" runat="server"></asp:Label>
                </li>
            </ItemTemplate>
        </asp:Repeater>
    </ul>
    <asp:SiteMapDataSource ID="smdsDefaultSiteMap" SiteMapProvider="APPSiteMapProvider" ShowStartingNode="false" runat="server" />
</div>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
protected void rptMenu_ItemDataBound(object Sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                if ((((SiteMapNode)(e.Item.DataItem)).Roles[0].ToString() =="*") || Page.User.IsInRole(((SiteMapNode)(e.Item.DataItem)).Roles[0].ToString()) || (Page.User.IsInRole("Administrators")) || (Page.User.IsInRole("Managers")))
                {
                    HyperLink hplItem = e.Item.FindControl("hplItem") as HyperLink;
                    if (hplItem.NavigateUrl.ToLower() == Request.CurrentExecutionFilePath.ToLower())
                    {
                        hplItem.Visible = false;
                        Label lblItem = e.Item.FindControl("lblItem") as Label;
                        lblItem.Visible = true;
                        lblItem.Text = hplItem.Text;
                    }
                    else
                    {
                        hplItem.Visible = true;
                    }
                }
            }
        }
...
Рейтинг: 0 / 0
Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
    #37509047
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
n_string,

Не охота хардкодить роли в коде. Я поэтому и сделал динамический SiteMapProvider. Доступ ролей к страницам - у меня лежит в БД.
Т.е. надо дать доступ - зашел в модуль администрирования - дал доступ, и она у юзера появилась в меню и в карте сайта.
...
Рейтинг: 0 / 0
Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
    #37509287
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hstas, SiteMapNode.Roles твой код заполняет?
...
Рейтинг: 0 / 0
Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
    #37509389
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

Роли я там не заполняю. Хотя ролепровайдер у меня свой, унаследованный от RoleProvider, но работает он с контроллером домена и учетными записями и группами пользователей.

А SiteMapProvider я делал на основании вот этой статьи
Разумеется я переписал метод AddDynamicNodes (смотри step 7) под свой механизм.

По отладке вижу - что мой SiteMapProvider инициализируется один раз. Видимо кэшит это все дело (так как больше Initialize не вызывается). И другим пользователям отдает именно этот закэшированный вариант.
...
Рейтинг: 0 / 0
Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
    #37509412
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, я наследуюсь от StaticSiteMapProvider - а он видимо не спроста Static :)
Чего делать то, пока не пойму в какую сторону копать
...
Рейтинг: 0 / 0
Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
    #37509654
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переопредели метод, вроде BuildSiteMap, вопреки примерам не проверяй наличие созданной рут-ноды, делай clear() и фигачь заново. Возможно с ролями можно поумнее, у меня чуть ли не год назад просто была разная структура для всех, реализовывать весь провайдер с нуля как-то запарно.
...
Рейтинг: 0 / 0
Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
    #37509660
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
общая структура примерно такая
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
	public class MyProvider: StaticSiteMapProvider
	{
		public override SiteMapNode RootNode {
			get {
				return BuildSiteMap();
			}
		}
	
		protected override SiteMapNode GetRootNodeCore() {
			return RootNode;
		}
		
		public override SiteMapNode BuildSiteMap() {
			lock(this) {
				Clear();
				var rootNode = ...
				return rootNode;
			}
		}
	}
...
Рейтинг: 0 / 0
Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
    #37541998
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы,

Я так и делаю. Проблема, что StaticSiteMapProvider один раз только строит структуру сайта, при старте процесса в IIS.
B кэширует структуру. Т.е. заходит юзер на сайт - строится карта сайта. Заходит следующий (напрмер с урезанными правами) - он увидит siteMap первого юзера.
Это легко проверить - поставить брейк-поинты.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как отключить кэширование SiteMap? Написал свой SiteMapProvider, карту сайта он строит
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]