如何在mvc中过滤视图网址

时间:2012-10-08 11:00:58

标签: asp.net-mvc visual-studio-2010 url asp.net-mvc-4

我在mvc中覆盖AuthorizeCore函数以进行身份​​验证和授权,当我调用视图表单控制器时,这工作正常。但现在我有一个视图,其中包含一些报告链接,我想向具有访问权限的用户显示报告。我可以隐藏报告链接,但无法限制直接网址。

这个网址请求很好[http:// MyDomain:1426 /公司/索引]但是 当url是:[http:// MyDomain:1426 / Reports / GrpView?OfferID = 1](因为我没有报告控制器)时,不会使用authorizecore方法 在MVC中有什么方法可以过滤视图网址吗?

2 个答案:

答案 0 :(得分:0)

提供报告功能的Reports/GrpView处理程序不是很清楚。它似乎不是ASP.NET MVC控制器操作,因为您将使用[Authorize]属性对其进行修饰并指定角色。

如果这是遗留的WebForms页面或处理程序,您可以使用<location>中的web.config部分来控制访问权限:

<location path="Reports/GrpView">
    <system.web>
        <authorization>
            <!-- deny access to all users -->
            <deny users="*"/> 

            <!-- allow access to users in the "admins" role -->
            <allow roles="admins"/> 
        </authorization>
    </system.web>
</location>

Authorize属性(以及从中派生的任何自定义属性)仅用于保护对ASP.NET MVC控制器操作的访问。如果您没有将ASP.NET MVC用于报告服务,则无法使用这些机制。

答案 1 :(得分:0)

我的报告在.aspx页面上,我将其放入报告视图文件夹(不良方法)。正如达林迪米特洛夫所说 为什么这个ASPX页面在你的Views文件夹中?此文件夹中的文件只能通过控制器操作提供。你不能在那里拥有经典的WebForms页面。因此,您必须拥有一个名为ReportsController的控制器,其中包含一个名为GrpView的操作,您可以使用[Authorize(Roles =“admins”)]属性进行装饰。另一方面,如果这是一个经典的WebForms页面,则需要将其从Views文件夹中移开,然后指定其路径。通过使用这种方法,我无法通过我的调用形式AuthorizeCore函数。

/// 我在.aspx页面上处理角色权限管理。如果有人找到任何其他解决方案,那么请分享。