役割ベースのメニューは機能しません、私は何が間違っているのですか?
-
28-10-2019 - |
質問
これが概要です
- メンバーシップを作成します
- 役割を作成します
- sitemapを作成します(変更を変更するには、役割= "admin")
- メニューを使用して、メニューを作成し、メニューにweb.sitemapをバインドします。
- 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を直接入力しても、ページを表示することが可能です。
所属していません StackOverflow