使用属性访问配置文件

时间:2014-06-24 13:05:42

标签: c# asp.net custom-attributes

在我的网站上,我有不同的页面,具有不同级别的访问权限。通常,我会使用一些东西:

if(!user.IsAdministrator)
    return RedirectToAction("AccessDenied", "Security");

但我意识到这使我与我预先建立的安全级别相关联;我实际上想要的是一个完全可定制的访问方案。

我想到的一个解决方案是在我想要限制访问的操作中设置一些属性,然后检索它们放置的位置。我对属性(至少是自定义属性)缺乏经验,虽然我知道如何列出所有被标记的动作,但我仍然在努力想出一种方法来检查正确的访问权限并拒绝访问。 / p>

关于这个主题的任何亮点?我也有兴趣知道是否有任何标准做法来处理这个问题。

1 个答案:

答案 0 :(得分:1)

通常在ASP.NET MVC中,Authorize属性可以用于此目的。

您可以从中派生并覆盖AuthorizeCore方法以满足您的需求。然后,您可以使用此属性标记MVC操作或整个MVC控制器。或者更好的是,您可以将其配置为全局过滤器,因此它将自动为所有控制器启用。然后,您可以使用AllowAnonymous属性标记您不希望受到保护的操作:http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous-attribute.aspx

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        if (filters != null)
        {
            filters.Add(new CustomAuthorizeAttribute());
        }
    }


[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        //your code here
    }

这是SO帖子,已经讨论了该属性 ASP.NET MVC 4 Custom Authorize Attribute with Permission Codes (without roles)

您可以在互联网上找到更多关于此主题的文章。