меню на основе ролей не работает, что я делаю не так? - PullRequest
0 голосов
/ 16 июня 2011

Вот обзор

  1. Создание участников
  2. Создание ролей
  3. Создание карты сайта (изменение для использования ролей = "admin")
  4. Создайте меню и привяжите web.sitemap к меню, используя новый источник данных из смарт-тега меню
  5. Измените web.config, чтобы включить securityTrimmingEnabled

Это работает следующим образом.Если я назначу роль корневому узлу в карте сайта, то меню будет правильно скрыто для всех других ролей, кроме ролей, для которых он назначен.

Если я использую роль в одном из подменю, оно не будет работать.Кто-нибудь знает, почему?

web.sitemap

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode roles="*"> <--------------- Roles Works here
  <siteMapNode title="Home" url="~/Default.aspx" roles="admin"></siteMapNode> <-------- But not here
<siteMapNode title="Videos" url="~/Tags.aspx" />
<siteMapNode title="Student" url="~/MemberList.aspx" roles="student"/>
<siteMapNode title="My Page" url="~/MyPage.aspx" />
<siteMapNode title="My Recent Views" url="~/RecentViews.aspx" />
<siteMapNode title="Upload a Video" url="~/Upload.aspx" />
  <siteMapNode title="Administer Users" url="~/AdministerUsers.aspx" roles="admin">
      <siteMapNode title="Creat user" url="createUser.aspx"></siteMapNode>
  </siteMapNode>
</siteMapNode>
</siteMap>

web.config файл (модификация)

<siteMap enabled="true">
    <providers>
        <clear/>
        <add siteMapFile="Web.sitemap" name="AspNetXmlSiteMapProvider" type="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true"/>
    </providers>
</siteMap>

1 Ответ

5 голосов
/ 16 июня 2011

Возможно, вы захотите проверить эту ссылку: http://blogs.msdn.com/b/dannychen/archive/2006/03/16/553005.aspx. Функция настройки безопасности ASP.Net является одной из наиболее часто неправильно понимаемых функций.

Основная идея заключается в том, что применяются настройки безопасностичерез тег <authorization> в web.config, а не через роли в карте сайта.Свойство role в карте сайта может только расширить безопасность, но не сузить его.Например, вот как вы действительно примените правило ролей ученика для ~ / MemberList.aspx:

<location path="~/MemberList.aspx">
  <system.web>
    <authorization>
      <allow roles="Student" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>

Это не только сделает ссылку исчезнувшей из вашего меню, но и фактически сделает страницу невозможнойпосетить кого-либо, не входящего в роль студента, даже если он введет URL-адрес непосредственно в браузер.Без тега <authorization> всегда можно будет напрямую ввести URL-адрес и по-прежнему видеть страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...