2010-03-08 106 views
0

当前我使用[Authorize(Roles =“.....”)]来保护我的控制器动作在我的ASP.NET MVC 1应用程序上,并且工作正常。但是,某些搜索视图需要具有按钮,这些按钮会根据搜索列表中选定的记录启用/禁用需要启用/禁用的这些操作,并且还需要登录用户的安全权限。ASP.NET MVC - 扩展授权属性

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

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

干杯

MH

回答

0

我发现这在另一个论坛,因此将它张贴在这里的情况下,任何人发现它是有用的。请注意,您是如何做到这一点取决于您是否使用MVC 1或2

创建类需求的变化来实现

public void OnAuthorization(AuthorizationContext filterContext) 

,然后你可以使用

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

和相同,用“action”代替“controller”(确保你先检查这些值中的空值)。在MVC 2中,这可以更改为filterContext.ActionDescriptor.ActionName和.ActionDescriptor.ControllerDescriptor.ControllerName,您将不必检查空值