如何在派生的控制器操作上添加不同的操作筛选器



我的控制器具有相同的操作,但具有不同的授权过滤器。

public class RoomAController:Controller
{
    [Authorize(Roles = "RoomAEditors")]
    public ActionResult SaveNote()
    {
       ...
    }
}
public class RoomBController:Controller
{
    [Authorize(Roles = "RoomBEditors")]
    public ActionResult SaveNote()
    {
       ...
    }
}

两个控制器中的SaveNote代码完全相同。所以我想把它放到像这样的基本控制器中。

public abastract class BaseController:Controller
{
    public ActionResult SaveNote()
    {
       ...
    }
}

有了这个基本控制器,如何在各个控制器中添加操作筛选器?

public class RoomBController:BaseController
{
    [Authorize(Roles = "RoomBEditors")]
    // how to add different authorization filters on the SaveNote action?
}

在我的抽象基本控制器上,有一个SaveNote操作。

您可以在 BaseController 中实现 SaveNote 方法,并使用适当的授权过滤器角色在 RoomA 和 RoomB 控制器中重写该方法。

public abstract class BaseController : Controller
{
    virtual public ActionResult SaveNote()
    {
        throw new NotImplementedException();
    }
}
public class RoomAController : BaseController
{
    [Authorize(Roles = "RoomAEditors")]
    public override ActionResult SaveNote()
    {
        return base.SaveNote();
    }
}
public class RoomBController : BaseController
{
    [Authorize(Roles = "RoomBEditors")]
    public override ActionResult SaveNote()
    {
        return base.SaveNote();
    }
}

您将在每个 SaveNote() 操作的 BaseController (Base) 上调用 SaveNote()。

最新更新