使用ClaimsPrincipalPermissionAttribute,如何捕获SecurityException?

时间:2012-11-19 22:55:03

标签: asp.net-mvc wif

在我的MVC应用程序中,我有一个删除客户的控制器操作,我正在使用基于声明的授权来使用WIF。

问题:如果某人没有访问权限,他们会在浏览器中看到异常(包含stacktrace),但我宁愿重定向它们。

这样可以让我重定向:

public ActionResult Delete(int id)
{
    try
    {
        ClaimsPrincipalPermission.CheckAccess("Customer", "Delete");
        _supplier.Delete(id);
        return RedirectToAction("List");
    }
    catch (SecurityException ex)
    {
        return RedirectToAction("NotAuthorized", "Account");
    }
}

这有效但抛出SecurityException我不知道如何捕获(当用户未被授权时):

[ClaimsPrincipalPermission(SecurityAction.Demand, Operation = "Delete", Resource =     "Customer")]
public ActionResult Delete(int id)
{
    _supplier.Delete(id);
    return RedirectToAction("List");
}

我想使用声明式方法,但不确定如何处理未经授权的请求。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用HandleError属性。您可以在此处查看其用法:ASP.Net MVC Preview 4 release

基本上,您应该能够使用HandleError属性修饰Delete ActionResult,并指定要捕获的异常类型和要显示的视图,如下所示:

[HandleError(ExceptionType = typeof(SecurityException), View = "UnauthorizedView")]

当然,您必须创建UnauthorizedView。如果您未指定视图,您将获得标准的错误视图(位于共享视图文件夹中)