Asp.net mvc 4 如何基于DB表设置对操作方法的授权访问?

Asp.net mvc 4 如何基于DB表设置对操作方法的授权访问?,asp.net-mvc-4,Asp.net Mvc 4,我在数据库中有一个mst\u角色表,其结构如下 id RoleName 1 Admin 2 Manager 3 Operator mst\u用户表如下 id username password RoleId 1 bob 123 2 2 rick 777 3 在我的MVC中,我有一个控制器命令,具有两种操作方法 public ActionResult TakeOrder() { } public ActionRe

我在数据库中有一个
mst\u角色
表,其结构如下

id  RoleName
1    Admin
2    Manager
3    Operator
mst\u用户
表如下

id   username password RoleId
1     bob      123      2
2     rick     777      3
在我的MVC中,我有一个控制器
命令
,具有两种操作方法

public ActionResult TakeOrder()
{

}

public ActionResult StopAllTransactions()
{

}
如何仅让角色经理访问
StopAllTransaction()
操作员访问
TakeOrder()

操作方法:

[AuthorizeDBRoleAttribute(Roles = "Role1,Role2")]
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 = "Role1,Role2,Role3";

            if (userRoles.IndexOf(Roles) > -1)
                return true;
            else
                return false;
        }
}
行动方法:

[AuthorizeDBRoleAttribute(Roles = "Role1,Role2")]
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 = "Role1,Role2,Role3";

            if (userRoles.IndexOf(Roles) > -1)
                return true;
            else
                return false;
        }
}

但是我将如何将Roles=“admin”映射到DB表的记录id=1,RoleName=“admin”MVC如何知道Roles=“admin”引用DB表中的记录?您需要在自定义类中重写类“AuthorizeAttribute”的“AuthorizeCore”方法。我将更新上一个示例中的代码。我不熟悉这个主题,所以我必须问这个问题,如果绑定用户角色,如AuthorizeDBRoleAttribute(Roles=“Role1,Role2”),它将不会访问数据库表,而是访问一个harcodes字符串属性字符串userRoles=“Role1,Role2,Role3”;在AuthorizeDBRoleAttribute类右侧。。。所以DB roles表是无用的,因为即使我向表中添加新角色,我仍然必须更新硬编码字符串userRoles=“Role1,Role2,Role3”;属性,因为授权是通过此字符串进行的。此外,我还假设我必须遵循用户auhorize的相同技术?您需要在数据库的“userRoles”变量中为登录用户绑定逗号分隔的角色。您需要查询数据库以获取登录用户的所有角色。假设我已作为经理角色登录,但授权属性如何知道我是经理角色?在身份验证cookie中的表单a中,我只存储我的用户名,因此它如何知道用户名属于管理者?但是我如何将Roles=“admin”映射到DB表的记录id=1,RoleName=“admin”MVC如何知道Roles=“admin”引用DB表中的方法?您需要在自定义类中重写类“AuthorizeAttribute”的“AuthorizeCore”方法。我将更新上一个示例中的代码。我不熟悉这个主题,所以我必须问这个问题,如果绑定用户角色,如AuthorizeDBRoleAttribute(Roles=“Role1,Role2”),它将不会访问数据库表,而是访问一个harcodes字符串属性字符串userRoles=“Role1,Role2,Role3”;在AuthorizeDBRoleAttribute类右侧。。。所以DB roles表是无用的,因为即使我向表中添加新角色,我仍然必须更新硬编码字符串userRoles=“Role1,Role2,Role3”;属性,因为授权是通过此字符串进行的。此外,我还假设我必须遵循用户auhorize的相同技术?您需要在数据库的“userRoles”变量中为登录用户绑定逗号分隔的角色。您需要查询数据库以获取登录用户的所有角色。假设我已作为经理角色登录,但授权属性如何知道我是经理角色?在身份验证cookie中的表单a中,我只存储我的用户名,因此它如何知道用户名属于某个管理员?