gpt4 book ai didi

c# - 将非 MVC 相关属性应用于 MVC 操作

转载 作者:行者123 更新时间:2023-11-30 15:28:24 26 4
gpt4 key购买 nike

我们的应用程序具有 PermissionAttribute 的概念。此属性在我们应用程序的基础层中定义,我们的命令和查询使用该属性进行修饰。由于此属性是在基础层中定义的,我们不能(也不想)让它继承自 FilterAttribute 或实现 System.Web.Mvc.IActionFilter

我们仍然希望将此属性应用于 Controller 操作,如下所示:

[Permission(Permissions.Administration.ManageUsers)]
public ActionResult Index()
{
return this.View();
}

应根据此属性应用适当的安全检查。我一直在浏览 MVC 代码库,以找到合适的 Hook 来自定义 MVC 行为,以允许基于此自定义属性添加这些安全检查。我想创建一个自定义 ControllerActionInvoker,它从其 GetControllerDescriptor 方法返回一个自定义 ReflectedControllerDescriptor,这将返回 FilterAttribute将根据 PermissionAttribute 的存在创建,但感觉工作量很大,我不确定这是正确的路径。

自定义 MVC 管道以便我们可以处理这种非 MVC 相关属性的有效且愉快的方法是什么?

最佳答案

我会这样做。首先像这样创建您自己的 AuthorizeAttribtues 实现:

public class PermissionAuthoriseAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
//Leaving the implementation of this to you, but you check if your
//PermissionAttribute is assigned and call it's methods.
if(...)
return true;

//You may want to check this first, depending on your requirements
return base.AuthorizeCore(httpContext);
}
}

然后通过将此行添加到 FilterConfig.cs 文件,将其应用到您的项目中:

filters.Add(new PermissionAuthoriseAttribute());

关于c# - 将非 MVC 相关属性应用于 MVC 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25887708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com