1

我的任务是为我们的 MVC 4.0 项目的方法创建一个自定义成员资格提供程序。

基于属性([Authorize]?),它必须确定是否允许尝试的用户使用该方法。

目前我有这个:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class TestAuthorize : CodeAccessSecurityAttribute
{
    public TestAuthorize(SecurityAction action)
        : base(action)
    {
    }

    public override IPermission CreatePermission()
    {
        throw new NotImplementedException();
    }
}

当我添加时, return new PrincipalPermission(null,null,true)我希望权限有效并且用户可以访问该方法。

当我添加时, return new PrincipalPermission(null.null,false)我希望权限无效,并且用户将被拒绝访问该方法。

但是,它仅在我使用 a 时才停止继续,throw new SecurityException("You are denied access")这也强制 MVC 应用程序停止,除非在客户端处理此异常(使用 try catch)。

我们有可能在我们的 MVC 项目中处理这个异常吗?

作为我们希望通过使用属性来完成的示例:

[TestAuthorize(SecurityAction.Demand)]
public List<string> GetList()
{
    //if access, return new List();
    //if no access, return null;
}  
4

1 回答 1

1

很确定你想从AuthorizeAttribute这里继承,而不是CodeAccessSecurityAttribute. 在您的属性中,如果应该允许用户继续,并且如果他们无权执行该方法所做的任何事情,您将覆盖AuthorizeCore并简单地返回。结果将触发响应,ASP.NET 通过将用户重定向到登录页面来自动处理该响应,以便他们可以以具有正确访问权限的人身份登录,尽管您可以根据需要更改此行为。truefalsefalseHTTP-401 Unauthorised

事实上,您甚至可能不需要创建自己的属性;如果您正在使用现有的 ASP.NET MVC mempership 提供程序,或者您可以获得任何您正在使用的东西来很好地使用它,那么现有的AuthorizeAttribute将为您工作。

于 2013-03-12T16:07:42.933 回答