0

我试图找到在 ASP.NET MVC 中构建我的安全角色的最佳方法。

基本上角色是静态的(管理员、客户、技术人员),但他们在每个部分中可以做的事情是可配置的,添加/编辑/删除/查看。

例如,您可以为特定区域(如用户帐户)配置客户的安全性。

用户可以是任何角色的组合,因此可以是客户和技术人员,并拥有两个用户的组合权限。

在 ASP.NET MVC 中执行此操作的合适方法是什么?

4

3 回答 3

1

我会为您提供以下解决方案:

  • 数据库

    1. 用户([PK]Id、姓名等)
    2. 角色([PK]Id、名称、描述等)
    3. 用户角色([PK] 用户 ID,[PK] 角色 ID)

用户表存储有关用户的信息,例如他们的姓名、电子邮件等。角色存储有关角色的信息,例如其名称、描述等。用户角色只是查找表,您可以使用它来将特定用户与特定角色联系起来。

  • 代码

为了让您的代码使用这些表,您可以添加您的自定义角色提供程序,您将有足够的设施使用 2 种方法:public override string[] GetRolesForUser(string username)public override bool IsUserInRole(string username, string roleName).

  • 用法

完成后,您只需使用 Authorize 属性[Authorize(Roles = "Administrators")]来检查用户是否有权访问特定操作或控制器,或者您可以使用 Razor 验证来根据用户角色显示/隐藏一些 html@User.IsInRole("Administrator")


请检查以下链接以获取更多信息

于 2013-08-05T12:24:02.163 回答
1

我们就是这样做的

public enum YourUserRoles
{
    None = 0,
    Admin = 1,
    Consumer = 2
}

public class YourAuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
    private readonly YourUserRoles[] _acceptedRoles;

    public YourAuthorizeAttribute(params VoicelrUserRoles[] acceptedroles)
    {
        _acceptedRoles = acceptedroles;
    }

    public YourAuthorizeAttribute(params bool[] allowAll)
    {
        if (allowAll[0])
            _acceptedRoles = new[] { VoicelrUserRoles.Admin, VoicelrUserRoles.Consumer };
    }

    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (SessionHelper.UserInSession == null)//user not logged in
        {
            string retUrl = filterContext.HttpContext.Request.RawUrl;
            FormsAuthentication.SignOut();
            filterContext.Result =
                 new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary {{ "controller", "home" },
                                             { "action", "index" },
                                             { "returnUrl",    retUrl } });//send the user to login page with return url
            return;
        }
        if (!_acceptedRoles.Any(acceptedRole => SessionHelper.UserInSession.Roles.Any(currentRole => acceptedRole == currentRole)))
        {
            filterContext.Result = new ViewResult
            {
                ViewName = "~/Views/Shared/Error.cshtml"
            };
        }
    }
}

[YourAuthorize(YourUserRoles.Client )]
public ActionResult Whatever()
{
  ....
}
于 2013-08-05T12:27:26.183 回答
0
  1. 最初可以检查用户存在多少个角色?
  2. 创建一个视图以显示角色并写下消息“请选择一个角色以继续”
  3. 选择用户类型后,将用户作为选择。
于 2017-07-20T07:22:13.093 回答