我的数据库中有一些表,其中包含用户名(包含域名,例如: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;
}
}
}
我尝试过这样使用它,但我无法访问我的网站。
答案 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);
}