役割ベースのメニューは機能しません、私は何が間違っているのですか?

StackOverflow https://stackoverflow.com/questions/6373092

  •  28-10-2019
  •  | 
  •  

質問

これが概要です

  1. メンバーシップを作成します
  2. 役割を作成します
  3. sitemapを作成します(変更を変更するには、役割= "admin")
  4. メニューを使用して、メニューを作成し、メニューにweb.sitemapをバインドします。
  5. web.configを変更して、SecurityTrimMingEnableを有効にします

それはこのように動作します。 SiteMapでルートノードにロールを割り当てると、メニューは、アバスがかかっているロールを除く他のすべての役割に対して正しい隠されています。

サブメニューの1つで役割を使用すると、機能しません。誰かが理由を持っていますか?

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>
役に立ちましたか?

解決

このリンクを確認することをお勧めします。 http://blogs.msdn.com/b/dannychen/archive/2006/03/16/553005.aspx. 。 ASP.NETのセキュリティトリミング機能は、最も頻繁に誤解されている機能の1つです。

基本的な考え方は、セキュリティトリミングが <authorization> サイトマップの役割を通じてではなく、web.configのタグ。 SiteMapの役割プロパティのみはできます 広がります セキュリティ、それを狭くしないでください。たとえば、〜/memberlist.aspxの学生の役割ルールを実際に適用する方法は次のとおりです。

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

これにより、リンクがメニューから消えなくなるだけでなく、実際にページをブラウザに直接入力したとしても、学生の役割ではない人がページを訪問することを不可能にします。なしで <authorization> タグ、常にURLを直接入力しても、ページを表示することが可能です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top