标签: roleprovider

具有租户特定角色的 ASP.NET 多租户应用程序

我们有一个多租户 ASP.NET 应用程序。到目前为止,租户已相互隔离,但是现在我们拥有管理多个租户的代理,并希望能够使用单个用户帐户管理所有租户。我正在努力找出实现这一目标的最佳方法,希望不会对我们正在使用的现有技术进行太大改变。

相关技术细节:

  • 用于成员资格和角色的 AspNetSqlMembershipProvider
  • C# 4.0(即将成为 4.5)
  • 表单认证
  • aspx 和 MVC (v3) 页面
  • 假设有 100 个或更多租户,因此任何解决方案都需要支持

我相信这些要求与 SQL Server 的安全模型非常相似。我们有一组登录名,代表可以登录系统的所有用户。用户应该能够被赋予一个或多个数据库(租户)的角色。示例:用户 Bob 在公司 A 中具有管理员角色,但在公司 B 中仅具有用户角色。我们还为我公司的员工提供“系统管理员”角色,允许我们访问任何租户以及专门的管理权限,例如创建/删除租户, 等等。

我对各种库、框架等进行了大量研究,但没有发现任何令人信服的证据表明其他库或框架会比我们目前拥有的更好。所以我目前正在考虑如何让 Sql Membership 提供者做我想做的事,除非有人能指出我更好的方向。我也不确定我知道在这方面搜索的最佳术语。

我有两个我正在考虑的选择:

  1. 仅向成员资格提供者添加少数角色,并在成员资格提供者之外处理“当前用户在此租户中是否具有此角色”的所有问题。会员提供程序将用于处理对系统的基本访问。
  2. 将租户特定角色添加到成员资格提供商。我们将在系统中拥有(# 个角色)x(# 个租户)角色。每个新租户都会向系统添加另一组角色,例如“租户 A:管理员”、“租户 A:用户”等。需要一些额外的表来管理关系以及一些自定义代码以确保访问正在向成员资格提供商请求正确的租户特定角色。

这些选项中的任何一个都好吗?还是我应该到别处寻求支持?

c# asp.net asp.net-membership roleprovider asp.net-mvc-3

2
推荐指数
1
解决办法
7426
查看次数

如何使用ASP.NET成员资格提供程序类

我想为我自己的数据库使用asp.net成员资格提供程序我有自己的表

这是我做了什么 我扩展了会员提供者类与我自己的写所有重复的方法. 是否正确使用成员资格提供程序类进行自定义使用?我也扩展了角色管理课程.

c# membership asp.net roleprovider

1
推荐指数
1
解决办法
1206
查看次数

使用MVC中的自定义方法填充@ Html.DropDownListFor()

好的,这是我的问题.我试图填充@Html.DropDownListFor()我的角色减去Admin角色.这很好用,但它显示了所有角色:

@Html.DropDownListFor(m => m.RoleName, new SelectList(Roles.GetAllRoles()))
Run Code Online (Sandbox Code Playgroud)

然而,这显示了所有角色,包括Adminroll.

所以我UserHelper.cs用这个方法创建了另一个类,基本上是这样的Roles.GetAllRoles():

public string[] GetUserRoles()
    {
        string[] userroles = null;
        using (MainVeinDataDataContext conn = new MainVeinDataDataContext())
        {
            userroles = (from r in conn.Roles
                         where r.Rolename != "Admin"
                         select r.Rolename).ToArray();
        }
        return userroles;
    }
Run Code Online (Sandbox Code Playgroud)

但是,作为MVC的新手,我不知道如何将此方法公开给视图中的DropDownList.所以无论我尝试什么,这都行不通:

@Html.DropDownListFor(m => m.RoleName, new SelectList(GetUserRoles()))
Run Code Online (Sandbox Code Playgroud)

我不确定我错过了什么,这让我发疯.希望那里有人知道我错过了什么.

selectlist roleprovider html.dropdownlistfor asp.net-mvc-3

1
推荐指数
1
解决办法
5999
查看次数

在自定义RoleProvider中首先使用EF代码导致许多数据访问异常的原因是什么?

我的角色提供者看起来像下面的类(删节).我在VS 2012上运行IIS Express和SQL 2012 Express,我在这个角色提供程序代码中得到了许多看似随机的异常.

public class Educ8RoleProvider : RoleProvider
{
    private readonly Educ8DbContext _dbContext = new Educ8DbContext();
    private readonly Authorization _authorization;
    public Educ8RoleProvider()
    {
        _authorization = new Authorization(_dbContext);
    }
    public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
    {
        try
        {
            base.Initialize(name, config);
        }
        catch (Exception ex)
        {
            ErrorSignal.FromCurrentContext().Raise(ex);
            throw;
        }
    }
    public override bool IsUserInRole(string username, string roleName)
    {
        return GetRolesForUser(username).Any(r => r.ToLower() == roleName);
    }
    public override string[] GetRolesForUser(string username)
    {
        return _authorization.GetRolesForMember(username).Select(r => r.Name).ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我Authorization …

asp.net-mvc entity-framework roleprovider ef-code-first asp.net-mvc-4

1
推荐指数
1
解决办法
413
查看次数

基于MVC4角色的控制器的动作访问

我想建立一个注册系统,在添加用户的同时,你可以选择你可以给他/她的角色类型.并且根据他/她的角色,将决定是否可以访问控制器中的某些动作.

例如,假设有两个角色,即管理员和开发人员.如下所述,只允许具有管理员角色的用户访问以下操作.

[Authorize(Roles = "admin"]
public ActionResult CreateUser()
{
   return View();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,我必须实施我的习惯RoleProviderIPrincipal?我试图找到一些例子,但没有得到我正在寻找的东西.以下是我的RegisterModel目前的样子

public class RegisterModel
    {
        [Key]
        public Guid Id;
        [Required]
        [Display(Name="First Name")]
        public string FirstName {get; set;}

        [Required]
        [Display(Name="Last Name")]
        public string LastName {get; set;}

        [Required]
        [Display(Name="Email Id")]
        [DataType(DataType.EmailAddress)]
        public string EmailId {get; set;}

        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [Display(Name = "Password")]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Required]
        [Display(Name = "Confirm Password")]
        [DataType(DataType.Password)] …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc authorization roleprovider asp.net-mvc-4

1
推荐指数
1
解决办法
5818
查看次数

控制器单元测试期间未启用角色管理器功能错误

我正在为我的控制器方法进行单元测试.在以下方法中,我想检查返回类型是否ViewResult

    [HttpGet]
    public ActionResult AddRepresentative(Guid businessUnitId)
    {
        var roles = Roles.GetAllRoles();
        var model = new AddRepresentativeModel
        {
            BusinessUnitId = businessUnitId,
            Roles = roles.Select(r => new SelectListItem
            {
                Value = r,
                Text = r,
            })
        };
        return View(model);
    }
Run Code Online (Sandbox Code Playgroud)

这就是我为测试所做的

   [TestMethod]
    public void AddRepresentative_Get_Action_RendersView()
    {
        var result = _controller.AddRepresentative(Guid.Empty);

        Assert.IsInstanceOfType(result,typeof(ViewResult));
    }
Run Code Online (Sandbox Code Playgroud)

错误:

测试方法AdminPortal.Tests.Controller_Test.Customer.BusinessUnitControllerTests.AddRepresentative_Get_Action_RendersView引发异常:System.Configuration.Provider.ProviderException:尚未启用角色管理器功能.

问题:在HttpGet方法中收集角色列表不是一个好习惯吗?

我需要在控制器或测试方法中进行一些更改才能使测试通过吗?

是否因为我正在使用RhinoMock而发生错误?

c# asp.net-mvc unit-testing roleprovider asp.net-mvc-4

1
推荐指数
1
解决办法
1001
查看次数

高级.NET成员/角色提供程序

我需要一个具有以下功能的RoleProvider:

动态分配角色到任务
认证/授权IPrincipals基于他们有权访问的系统中的动态分配任务
报告显示当前登录的用户以及其他常见用法统计信息.

我很确定我将不得不自己动手,但我想确保我不会错过任何OSS甚至是MS.

我也在使用ASP.NET MVC,所以我的基本计划是编写一个自定义属性,如:[Authorize(Task=Tasks.DeleteClient)] 将它放在需要授权的方法上.我将根据用户在数据库中配置的任何设置,根据角色授权任务,而不是根据角色进行授权.

思考?

asp.net asp.net-mvc roleprovider sqlroleprovider

0
推荐指数
1
解决办法
1173
查看次数