1

securityTrimmingEnabled がないと、メニューは正常に表示されますが、オンにするとすぐにメニュー全体が消えます。同様に、デフォルトのページや承認を必要としないページであっても、すべてについて話している.

Web.sitemap のコードは次のとおりです。

    <?xml version="1.0" encoding="utf-8" ?>
    <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
      <siteMapNode>
        <siteMapNode title="Home" url="~/Default.aspx" />
        <siteMapNode title="About" url="~/About.aspx" />
        <siteMapNode title="Suppliers" url="~/Suppliers.aspx" />
        <siteMapNode title="Departments" url="~/Departments.aspx" />
        <siteMapNode title="Management">
          <siteMapNode title="Account" url="~/Account_Employee.aspx" />
          <siteMapNode title="Store" url="~/StoreManagement.aspx" />
          <siteMapNode title="Chain" url="~/ChainManagement.aspx" />
          <siteMapNode title="System" url="~/SystemAdmin.aspx" />
        </siteMapNode>
      </siteMapNode>
    </siteMap>

これは、web.config でのサイト認証セットアップのコードです。

        <authentication mode="Forms">
            <forms loginUrl="~/Account/Login.aspx" timeout="2880"/>
        </authentication>
        <membership defaultProvider="TestServerMembership">
            <providers>
                <clear/>
                <add name="TestServerMembership" type="System.Web.Security.SqlMembershipProvider" connectionStringName="TestServerConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresUniqueEmail="false" requiresQuestionAndAnswer="false" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" applicationName="SampleSite" passwordFormat="Hashed"/>
            </providers>
        </membership>
        <profile>
            <providers>
                <clear/>
                <add name="TestServerMembershipProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="TestServer" applicationName="/"/>
            </providers>
        </profile>
        <roleManager enabled="true" defaultProvider="TestServerRoleProvider">
            <providers>
                <clear/>
                <add connectionStringName="TestServerConnection" applicationName="/" name="TestServerRoleProvider" type="System.Web.Security.SqlRoleProvider"/>
            </providers>
        </roleManager>
        <siteMap enabled="true">
            <providers>
                <clear/>
                <add siteMapFile="Web.sitemap" name="AspNetXmlSiteMapProvider" type="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true"/>
            </providers>
        </siteMap>

これは、web.config でロールをセットアップするためのコードです。

 <location path="Default.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
    <location path="About.aspx">
        <system.web>
            <authorization>
        <deny users="*"/>
                <allow roles="User"/>
            </authorization>
        </system.web>
    </location>
    <location path="Departments.aspx">
        <system.web>
            <authorization>
        <deny users="*"/>
        <allow roles="User"/>
            </authorization>
        </system.web>
    </location>
    <location path="Suppliers.aspx">
        <system.web>
            <authorization>
        <deny users="*"/>
        <allow roles="User"/>
            </authorization>
        </system.web>
    </location>
  <location path="Account_Employee.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
        <allow roles="User"/>
      </authorization>
    </system.web>
  </location>
  <location path="StoreManagement.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
        <allow roles="StoreManager"/>
      </authorization>
    </system.web>
  </location>
  <location path="ChainManagement.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
        <allow roles="ChainManager"/>
      </authorization>
    </system.web>
  </location>
  <location path="SystemAdmin.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
        <allow roles="XsiteInternalAdmin"/>
      </authorization>
    </system.web>
  </location>
4

1 に答える 1

3

これは、水平方向の ASP.NET メニューを使用している場合に問題になることがわかりました。通常、水平メニューを使用する場合は、サイトマップ ファイルのルート ノードを非表示にします。これは、ルート アイテムが 1 つだけの一番上の行は意味がないためです。(SiteMapDataSource の ShowStartingNode プロパティは False に設定されています。)

修正は、以下に示す web.sitemap に roles="*" を含めることで、すべてのロールがルートの (未使用の) ダミー siteMapNode にアクセスできるようにすることでした。

<?xml version="1.0" encoding="utf-8" ?>
<siteMap  enableLocalization="true"
     xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="" title="" roles="*"  description="">
      <siteMapNode url="~/default.aspx" resourceKey="siteMapHome" 
       title="Home" roles="admin,account" description="" />
<!-----More nodes-->

主なソースはこちら。

あなたのコードのために。

 <?xml version="1.0" encoding="utf-8" ?>
    <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
      <siteMapNode roles="*">
        <siteMapNode title="Home" roles="*" url="~/Default.aspx" />
        <siteMapNode title="About" roles="*" url="~/About.aspx" />
        <siteMapNode title="Suppliers" roles="*" url="~/Suppliers.aspx" />
        <siteMapNode title="Departments" roles="*" url="~/Departments.aspx" />
        <siteMapNode title="Management" roles="*">
          <siteMapNode title="Account" roles="*" url="~/Account_Employee.aspx" />
          <siteMapNode title="Store" roles="*" url="~/StoreManagement.aspx" />
          <siteMapNode title="Chain" roles="*" url="~/ChainManagement.aspx" />
          <siteMapNode title="System" roles="*" url="~/SystemAdmin.aspx" />
        </siteMapNode>
      </siteMapNode>
    </siteMap>
于 2012-05-09T19:51:21.220 に答える