当我使用基于角色的授权时,它如何知道当前登录的用户角色?

时间:2016-01-19 15:40:35

标签: asp.net-mvc-4

假设我对某个操作有以下基于角色的授权

{
  "rules": {
    ".read": true,
    ".write": "auth.uid = 'myserver'"
  }
}

这里是AuthorizeDBRoleAttribute类

[AuthorizeDBRoleAttribute(Roles = "Manager")]
public ActionResult Welcome()
{
  return View();
}

我有单独的数据库表public class AuthorizeDBRoleAttribute : AuthorizeAttribute { public string Roles { get; set; } protected override bool AuthorizeCore(HttpContextBase httpContextBase) { //Bind User Roles from Database here string userRoles = "Manager,Supervisor,Inspector"; if (userRoles.IndexOf(Roles) > -1) return true; else return false; } } Roles

假设当前登录的用户是Users 经理。这个Role属性如何知道当前用户"AuthorizeDBRoleAttribute",以便它可以访问Action方法

this post讨论了如何设置基于角色的授权。我想进一步拖动下一步,看看MVC如何找出当前用户的角色等等

1 个答案:

答案 0 :(得分:1)

从当前IPrincipal开始,取自http上下文并由身份验证模块设置。

然后,根据您当前的方法(我们显然不知道)您要么已经存储在主体对象中的角色,要么您只拥有用户名,并从数据库中检索当前用户名的角色

您引用的代码的作者甚至在那里发表评论 - 检索当前用户名的用户角色,或多或少像:

 string username = httpContextBase.User.Identity.Name;

 var roles = whereeverYourRolesAreStored.RolesForUser( username );