在MVC 4中,我手动添加了身份验证,我的意思是,没有会员资格。
它只需要用户名和密码,对数据库进行身份验证。
现在,我如何允许有效(身份验证)用户与其他控制器进行交互,因为我在所有其他控制器上添加了Authorize
注释,并且只想限制身份验证用户应该允许访问其他控制器操作方法..请指导我如何实现这一点,因为不使用会员资格?
谢谢
答案 0 :(得分:1)
一种方法是编写自己的自定义授权属性:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
Entities context = new Entities(); // my entity
private readonly string[] allowedroles;
public CustomAuthorizeAttribute(params string[] roles)
{
this.allowedroles = roles;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool authorize = false;
foreach (var role in allowedroles)
{
var user = context.AppUser.Where(m => m.UserID == GetUser.CurrentUser/* getting user form current context */ && m.Role == role &&
m.IsActive == true); // checking active users with allowed roles.
if (user.Count() > 0)
{
authorize = true; /* return true if Entity has current user(active) with specific role */
}
}
return authorize;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
然后使用它:
[CustomAuthorize(“Administrator”)
public ActionResult SomeAction()
{
return View();
}
请参阅Custom Authorization in MVC
或者您可以编写自定义操作过滤器属性,请参阅Custom Filters in MVC
我最近实现的另一种方法是定义您自己的基本控制器并从中继承其他控制器:
How require authorization within whole ASP .NET MVC application