使用 web.sitemap 控制页面访问
我正在 web.config 中使用
标记为 ASP.NET 网站中的页面设置权限,类似于此:
<location path="Users.aspx">
<system.web>
<authorization>
<allow roles="Administrator"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
但是,我也有一个 web.sitemap,它基本上包含相同的内容信息,即哪些用户角色可以查看/访问哪些页面。我的 web.sitemap 的片段:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode title="Home">
... lots of nodes here ...
<siteMapNode url="users.aspx" roles="Administrator" title="users" description="Edit users" />
...
</siteMapNode>
</siteMap>
是否有某种巧妙的方法仅使用 web.sitemap 来配置访问?
标记非常冗长,我不喜欢重复此信息。
I was setting up permissions for pages in a ASP.NET website with <location>
tags in web.config, something similar to this:
<location path="Users.aspx">
<system.web>
<authorization>
<allow roles="Administrator"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
However, I also have a web.sitemap which basically contains the same information, i.e. which user roles can see/access which pages. A snippet from my web.sitemap:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode title="Home">
... lots of nodes here ...
<siteMapNode url="users.aspx" roles="Administrator" title="users" description="Edit users" />
...
</siteMapNode>
</siteMap>
Is there some kind of nifty way of using web.sitemap only to configure access? The <location>
tags are quite verbose, and I don't like having to duplicate this information.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可能正在寻找 SecurityTrimmingEnabled。请参阅此论坛帖子和博客条目了解更多详细信息。
因此,
Web.config
限制直接 URL 键入的访问和Web.sitemap
- 来自显示的 URLProbably you're looking for SecurityTrimmingEnabled. See this forum post and blog entry for more details.
So
Web.config
restricts access from direct URL typing andWeb.sitemap
- from URLs being displayed当然,您可以在 web.config 中定义一个 SiteMapProvider,并使用 CurrentNode 属性来获取与请求的页面相关的 SiteMapNode。
首先声明您的 siteMap 提供程序 (web.config) :
使用 CurrentNode 进行页面访问控制的示例代码(您可以做得更好;)):
注意我添加了每个人角色(*),非常有用。
Sure, you can define a SiteMapProvider in your web.config, and use the CurrentNode property to get the SiteMapNode related to the requested page.
First declare your siteMap provider (web.config) :
Sample code for page access control with CurrentNode (you can do it better ;)) :
Note I added the everyone role (*), very usefull.
这是我自己的
SiteMapProvider
的代码,它会抛出异常,其中请求页面(节点)的用户无权执行此操作(他的角色不在节点角色列表中)来实现我的自己的角色逻辑我还制作了自己的
RoleProvider
。Here is the code of my own
SiteMapProvider
which throws an exception where user being requested a page (node) has no right to do that (his role isn't in the list of node's roles)To implement my own roles logic I also made my own
RoleProvider
.