我是asp.net身份的新手。我正在努力学习它。我想了解如何在asp.net MVC 5身份中的authorize属性中使用动态角色。因为如果我们在应用程序中有很多角色,那么我们就不能通过硬编码来装饰它。请帮我详细说明一个好例子。
提前谢谢:-)
答案 0 :(得分:1)
扩展AuthorizeAttribute以支持正则表达式,如下所示:
class RegexAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
return base.AuthorizeCore(httpContext);
}
IPrincipal user = httpContext.User;
if (user == null || user.Identity == null || !user.Identity.IsAuthenticated)
{
return base.AuthorizeCore(httpContext);
}
if (!string.IsNullOrEmpty(Users) && Regex.IsMatch(user.Identity.Name, Users))
{
return true;
}
if (!string.IsNullOrEmpty(Roles))
{
var rolesManager = new RoleStore<IdentityRole>(httpContext.GetOwinContext().Get<ApplicationDbContext>());
var matchedRoles = rolesManager.Roles.Select(t => t.Name).AsEnumerable().Where(t => Regex.IsMatch(t, Roles));
if (matchedRoles.Any(user.IsInRole))
{
return true;
}
}
return base.AuthorizeCore(httpContext);
}
}
稍后您可以组织角色,以便能够使用这样的正则表达式匹配它们:
[RegexAuthorize(Roles = @"Role #\d")]
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
这将匹配以下所有角色:角色#0,角色#1,...,角色#9
希望这有帮助!
答案 1 :(得分:0)
您可以在此链接中找到微软支持的完整解释和演示项目,其中包含有关使用mvc身份和角色,声明的多个示例....