ASP.NET MVC - 用户在控制器中进行授权

时间:2014-04-14 08:30:12

标签: entity-framework asp.net-mvc-4 authorization

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

对于任何建议,我将非常感激 在此先感谢您的帮助。 ;)
单胞菌

====编辑====
例如:ASP.NET MVC 4 Custom Authorize Attribute with Permission Codes (without roles)

在我的主控制器中:

[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;
        }
    }
}

我尝试过这样使用它,但我无法访问我的网站。

1 个答案:

答案 0 :(得分:1)

试试这个:

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

希望它会有所帮助

更新

  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);
   }