【发布时间】:2014-05-28 03:16:03
【问题描述】:
我的数据库中有包含用户名的表(带有域,例如:Domain1\user1)。我的项目有 Windows 身份验证。我有两个控制器 - 一个用于所有登录用户,第二个用于特定用户。我的表有 3 列:(Id、Name、Extra),其中“Extra”仅填充用户,即管理员(它有 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;
}
}
}
我试过像这样使用它,但我无法访问我的网站。
【问题讨论】:
-
您必须创建自己的过滤器。 stackoverflow.com/questions/13264496/…
-
我知道这一点。但是我想使用在 Extra 列中搜索特定行来查找管理员用户 - 我不知道如何实现这一点......您提供的示例中的 AccessLevel 是什么?
-
您可以将
AccesLevel替换为Extra -
好的,那么我应该如何编写方法来从我的数据库中获取我想要的东西?我看到我必须更改此行:
string privilegeLevels = string.Join("", GetUserRights(httpContext.User.Identity.Name.ToString()));但如何更改?当我想在它之前使用时:private Reports_DBEnt REn = new Reports_DBEnt();然后string privilegeLevels = string.Join("", REn.Users....);它不起作用。 -
在
FilterConfig.cs文件中,您应该添加自定义授权属性filters.Add(new AuthorizeUserAttribute());
标签: entity-framework asp.net-mvc-4 authorization