自定义过滤器属性不会在代码调用上运行

时间:2015-01-12 14:22:40

标签: asp.net-mvc authorization filterattribute asp.net-mvc-custom-filter

我正在使用自定义操作过滤器来授权用户使用Actions,其中一些返回ActionResult而其他人返回JsonResult。

对于每个常规操作系统都执行OK。但是,现在我有另一个要求来实现我的设计失败的地方。

视图发布到:

[AuthorizationFilter(Entity = AuthEntity.MyItem, Permission = AuthPermission.Write)]
public JsonResult Edit(MyModel model)

我检查用户对写入操作的授权。此检查执行正常。但实际上我的Action只检查一个条件并将Action重定向到Controller中的另一个Action,如下所示:

[AuthorizationFilter(Entity = AuthEntity.MyItem, Permission = AuthPermission.Write)]
public JsonResult Edit(MyModel model)
{
    if (model.Id == 0)
    {
        return Insert(model);
    }
    else
    {
        return Update(model);
    }
}

此外,更新操作还会检查需要其他授权的特定状态:

public JsonResult Update(MyModel model)
{
    if (model.StatusId == (int)Shared.Enumerations.Status.Approved)
        {
            return UpdateRequiresApproval(model);
        }
        else
        {
            return UpdateRequiresNonApproval(model);
        }
    }

[AuthorizationFilter(Entity = AuthEntity.MyItem, Permission = AuthPermission.Approve)]
public JsonResult UpdateRequiresApproval(MyModel model)

问题是,虽然我在 UpdateRequiresApproval 操作上定义了自定义属性过滤器,但它不会运行过滤器(可能),因为它通过代码调用被另一个操作重定向,但是不是直接来自View。

当代码落入 UpdateRequiresApproval 操作时,如何让我的过滤器运行?

问候。

0 个答案:

没有答案