0

目前我使用 [Authorize(Roles = ".....")] 来保护我的 ASP.NET MVC 1 应用程序上的控制器操作,这工作正常。但是,某些搜索视图需要具有路由到这些操作的按钮,这些操作需要根据搜索列表中选择的记录以及登录用户的安全权限来启用/禁用。

因此,我认为我需要有一个类访问数据库表,该表交叉引用这些目标控制器/操作与应用程序角色来确定这些按钮的状态。显然,这会使事情变得混乱,因为 privs 需要在 2 个地方维护 - 在该类/DB 表中以及控制器操作中(另外,如果我想更改对操作的访问,我将不得不更改代码和编译,而不仅仅是更改数据库表条目)。

理想情况下,我想扩展 [Authorize] 功能,以便不必在 [Authorize] 代码中指定角色,而是根据用户、控制器和操作查询安全类,然后返回一个布尔值允许或拒绝访问。有没有关于这方面的好文章 - 我无法想象这是一件不寻常的事情,但我似乎很难找到任何关于如何去做的事情(可能是周一早上的大脑)。我已经开始了一些代码,查看文章http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/,并且它似乎开始正常,但我找不到从 httpContext 获取调用控制器和操作值的“正确”方法 - 我可能会捏造一些代码来从请求 url 中提取它们,但是对我来说似乎不对,我宁愿正确地做。

干杯

MH

4

1 回答 1

0

我在另一个论坛上找到了这个,所以会在这里发布,以防有​​人觉得它有用。请注意,执行此操作的方式会根据您使用的是 MVC 1 还是 2 而有所不同

您创建的类需要实现

public void OnAuthorization(AuthorizationContext filterContext)

然后你可以使用

string controllerName = filterContext.RouteData.Values["controller"].ToString();

同样,将“控制器”替换为“操作”(确保首先检查这些值中的空值)。在 MVC 2 中,这可以更改为 filterContext.ActionDescriptor.ActionName 和 .ActionDescriptor.ControllerDescriptor.ControllerName 并且您不必检查空值

于 2010-05-02T12:06:46.257 回答