Web.sitemap&Role点滴

  Asp.net 2.0的Sitemap和Role机制,为我们提供了一种简洁的办法处理权限与菜单显示的问题.例如,我们可以在Web.sitemap中,通过下面的配置进行菜单显示的控制:

     <siteMapNode url=“” title=First Level Menu description=“” roles=RoleA>

         <siteMapNode url=~/A/AAA.aspxtitle=Menu Item For Role Aroles=RoleA></siteMapNode>

         <siteMapNode url=~/B/BBB.aspxtitle=Menu Item For Role Aroles=RoleA></siteMapNode>

         <siteMapNode url=~/B/CCC.aspxtitle=Menu Item For Role Aroles=RoleA></siteMapNode>

     </siteMapNode>

  在这个简单的例子里,只有登陆用户属于RoleA,才能看到”First Leve Menu”及其子菜单.很容易理解.不过,有时候需求会稍微复杂一点,比如,只有属于RoleA的用户有权限看到第一个子菜单;只有属于RoleB的用户有权限看到第二个子菜单;只有属于RoleC的用户有权限看到第三个子菜单.这个时候,我们可能会很自然的想到使用如下的配置进行控制:

     <siteMapNode url=“” title=First Level Menu description=“” roles=RoleA,RoleB,RoleC>

         <siteMapNode url=~/A/AAA.aspxtitle=Menu Item For Role Aroles=RoleA></siteMapNode>

         <siteMapNode url=~/B/BBB.aspxtitle=Menu Item For Role Broles=RoleB></siteMapNode>

         <siteMapNode url=~/B/CCC.aspxtitle=Menu Item For Role Croles=RoleC></siteMapNode>

     </siteMapNode>
  应该是符合要求的,不是吗?不过,当你以属于RoleA的用户登陆后,你会发现,你同样可以看到”Menu Item For Role B”和”Menu Item For Role C”.相当令人疑惑.博客堂的一位同学也对这个问题不解了一下.Web.sitemap和Membership内部机制没深入研究过,这里只记录下解决方案.其实也十分简单,我们只需要在相应的目录下增加一个web.config,在其中增加location配置节,配合着authorization配置节,来解决这个问题,以上面这个需求为例子,我们只需要在目录A下增加一个web.config,具体内容如下:

     <configuration>

         <system.web>

             <authorization>

                 <allow roles=RoleA/>

                 <deny users=*/>

             </authorization>

         </system.web>

     </configuration>
  在目录B下增加一个web.config,具体内容如下:

     <configuration>

         <location path=BBB.aspx>

              <system.web>

                   <authorization>

                       <allow roles=RoleB/>

                       <deny users=*/>

                   </authorization>

              </system.web>

         </location>

         <location path=CCC.aspx>

              <system.web>

                   <authorization>

                       <allow roles=RoleC/>

                       <deny users=*/>

                   </authorization>

              </system.web>

         </location>

     </configuration>
  好了,分别用属于RoleA,RoleB,RoleC的用户登陆,将只看到相应的菜单.

版权声明:本文为twilight原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/twilight/archive/2008/08/29/1279832.html