我有一个基本控制器,它在构造函数中接收功能名称,如下所示:
public abstract class BaseController : Controller
{
protected string Feature { get; private set;}
protected BaseController(){ }
protected BaseController(string feature)
{
this.Feature = feature;
}
}
在我的所有控制器中,我构造如下:
[AuthorizeUser]
public class ProductController : BaseController
{
public ProductController(IProductService service)
: base("Product Management")
{
...
}
}
在我的应用程序中,授权是按功能(而非Action),因此,我创建了一个AuthorizeUser属性并装饰了我的所有控制器。
public class AuthorizeUserAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
....
}
}
有没有办法在AuthorizeCore 中获取我的基础(在示例中,“产品管理”)中定义的值?
我知道方法必须是线程安全的,所以,我需要一些帮助来解决这个问题。也许使用其他覆盖,如 OnAuthorization 和 OnCacheAuthorization ?我关心的是线程安全性
答案 0 :(得分:0)
我不确定是否可以做你想做的事。如果可能,我会建议您为AuthorizeUserAttribute创建一个新的construcor并发送该功能。
[AuthorizeUser("MySuperFeature")]
然后使用该功能在AuthorizeCore中进行验证。