Entity framework ASP.NET MVC-控制器中的用户授权

Entity framework ASP.NET MVC-控制器中的用户授权,entity-framework,asp.net-mvc-4,authorization,Entity Framework,Asp.net Mvc 4,Authorization,我的数据库中有一个表,其中包含用户的名称(带有域,例如:Domain1\user1)。我的项目具有Windows身份验证。我有两个控制器-一个用于所有登录用户,另一个用于特定用户。我的表有3列:(Id、Name、Extra),其中“Extra”仅为用户填充,用户是admin(它有varchar:“admin”)。 我想创建这样的授权,其中只有管理员将有权访问第二个控制器的网站。怎么写 如有任何建议,我将不胜感激。 提前谢谢你的帮助 一元论 ===编辑==== 例如: 在我的主控制器中: [Aut

我的数据库中有一个表,其中包含用户的名称(带有域,例如:Domain1\user1)。我的项目具有Windows身份验证。我有两个控制器-一个用于所有登录用户,另一个用于特定用户。我的表有3列:(Id、Name、Extra),其中“Extra”仅为用户填充,用户是admin(它有varchar:“admin”)。
我想创建这样的授权,其中只有管理员将有权访问第二个控制器的网站。怎么写

如有任何建议,我将不胜感激。
提前谢谢你的帮助
一元论

===编辑====
例如:

在我的主控制器中:

[AuthorizeUser(AccessLevel = "Extra")]  
public class SecureController : Controller
{
      (...) 
}



public class AuthorizeUserAttribute : AuthorizeAttribute
{
    public string AccessLevel { get; set; }
    private Report_DBEnt REn = new Report_DBEnt(); 

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (!isAuthorized)
        {
            return false;
        }


        string privilegeLevels = string.Join("", REn.Users.Where(u => u.Extra.Equals("admin")).FirstOrDefault()); 

        if (privilegeLevels.Contains(this.AccessLevel))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
我尝试过这样使用它,但我无法访问我的网站。

试试这个:

[AuthorizeUser(AccessLevel = "admin")]  
public class SecureController : Controller
{
  (...) 
}
希望能有所帮助

更新
您必须创建自己的过滤器。我知道这一点。但我想通过搜索列Extra中的某一行来查找管理员用户-我不知道如何实现这一点。。。您提供的示例中的AccessLevel是什么?您可以将
AccessLevel
替换为
Extra
Ok,那么我应该如何编写方法来从数据库中获取所需的内容呢?我看到我必须更改这一行:
string privileglevels=string.Join(“,GetUserRights(httpContext.User.Identity.Name.ToString())但是如何?当我想在它之前使用时:
private Reports\u DBEnt REn=new Reports\u DBEnt()string privileglevels=string.Join(“,REn.Users…”)
它不起作用。在
FilterConfig.cs
文件中,您应该添加自定义授权属性
filters.add(new AuthorizeUserAttribute())还不是全部。我想我有
privileglevels
bad。我应该以某种方式使用httpContext.User.Identity.Name.ToString()
,不是吗?我尝试了
string.Join(“,REn.Users.Where(u=>u.Name==httpContext.User.Identity.Name))但我仍然没有访问权限。尝试在筛选器中放置断点,看看筛选器内部发生了什么。我添加:
var user=httpContext.user.Identity.Name;var user2=REn.Users.Where(u=>u.Name==user.FirstOrDefault()并且它们是正确的。但是字符串
privileglevels
格式不正确,因为返回null。是您的
httpContext.User.Identity.Name
null
的不同之处吗?是的,它不是null。现在一切都好了D我忘了我必须使用
选择(u=>u.Extra)
。谢谢!!!
  public class AuthorizeUserAttribute : AuthorizeAttribute
  {
    public string AccessLevel { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
      if(httpContext.User.Identity.IsAuthenticated)
       {
         string privilegeLevels = string.Join("",GetUserRights(httpContext.User.Identity.Name.ToString()); 

         if (privilegeLevels.Contains(this.AccessLevel))
          {
           return true;
           }
         else
           {
           return false;
           }
       }
     else
     return false;

    }
}

   private string GetUserRights(string userName)
   {
     private Report_DBEnt REn = new Report_DBEnt();
     return REn.Users.Where(u => u.UserName== userName).Select(u=>u.Extra);
   }