我们的应用程序正在从 WebForms 迁移到 MVC。我们有不同的方式来处理授权。查询数据库 View 以验证用户授权。此 View 根据每个用户返回所有菜单层次结构。例如,如果 User1 试图访问名为 SecretList.aspx 的页面,则通过菜单层次结构(在授权后保存在 HTTP session 中)应用搜索以检查访问权限。如果该用户存在与 SecretList.aspx 相关的菜单项,则授予访问权限。
我的问题是,如何在 ASP.NET MVC 3 中实现这种方法?
我不想为每个 Controller 操作添加属性,我已经阅读过有关路由约束和自定义 Controller 的信息。
要路由约束,我可以访问 HTTP session 并检索我的菜单层次结构以进行授权查询吗?
对于自定义 Controller ,我应该考虑重载哪个方法?在 Controller 执行完整的 Action 代码之前,我可以检查授权并重定向到另一个 View 吗?
还有什么更好的主意吗?
最佳答案
我会使用全局添加到所有操作的自定义操作过滤器,它的工作方式与内置的授权属性非常相似。 Action 过滤器在路由已解析并创建 Controller 后运行(因此传递给 Controller 的任何内容都必须可由任何用户构造)然后它可以检查用户是否可以执行 Action 或者是否应该返回另一个 ActionResult。
我强烈建议查看 MVC 源代码(或使用像 ILSpy 这样的工具)来查看授权属性的代码。
您可以使用自定义路由约束,但这实际上意味着用户不存在该路由,而不是不允许他们访问。
关于c# - MVC Controller 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10308501/