我添加了一个用户并将他分配给一个角色,当我使用 Membership.GetAllUsers() 它返回无

Posted

技术标签:

【中文标题】我添加了一个用户并将他分配给一个角色,当我使用 Membership.GetAllUsers() 它返回无【英文标题】:I have added a user and assigned him to a role, when i use Membership.GetAllUsers() it returns none 【发布时间】:2014-01-07 21:45:02 【问题描述】:

旁注:我使用的是 vs2013 express,没有安装其他任何东西。

我正在构建具有以下身份验证/授权目标的 Intranet 站点

使用 Roles 类的自定义角色 无需登录,如果您已登录 Windows,则可以查看应用程序 能够使用 [Authorise(Roles="Admin")] 类型的属性 能够从用户管理页面管理用户(创建/删除/列出/编辑)。

我一直在关注这个:http://weblogs.asp.net/scottgu/archive/2006/07/23/Recipe_3A00_-Implementing-Role-Based-Security-with-ASP.NET-using-Windows-Authentication-and-SQL-Server.aspx

但我不确定如何创建/列出用户...这是我目前所拥有的:

我已经添加了一个用户并将他分配给一个角色,当我使用 Membership.GetAllUsers() 时它返回无

Web.config 位:

<authentication mode="Windows"></authentication>

<authorization>
  <deny users="?" />
</authorization>

<roleManager enabled="true" defaultProvider="SqlRoleManager">
  <providers>
    <clear/>

    <add name="SqlRoleManager"
         type="System.Web.Security.SqlRoleProvider"
         connectionStringName="EFDbContext"
         applicationName="TEST" />

  </providers>
</roleManager>

<membership defaultProvider="SqlProvider"
  userIsOnlineTimeWindow="15">
  <providers>
    <add
      name="SqlProvider"
      type="System.Web.Security.SqlMembershipProvider"
      connectionStringName="EFDbContext"
      applicationName="TEST"
      enablePasswordRetrieval="false"
      enablePasswordReset="true"
      requiresQuestionAndAnswer="true"
      requiresUniqueEmail="false"
      passwordFormat="Hashed"
      maxInvalidPasswordAttempts="5"
      passwordAttemptWindow="10" />
  </providers>
</membership>

我在 Global.asax 中添加了我的第一个用户,如下所示:

        if(!Roles.RoleExists("Admin"))
         
            Roles.CreateRole("Admin");
            Roles.AddUserToRole(@"JIMMYT1988\jimmyt1988", "Admin");
        

用户和角色正在工作,因为如果我阻止对管理员的访问,我可以进入......而如果我在没有添加角色的情况下创建了用户,则不允许他访问......所以这一切都很好并且工作.

这是我阻止访问只有管理员角色:

[Authorize(Roles = "Admin")]
public class UserController : Controller

    private IUserRepository repository;

    public UserController(IUserRepository repo)
    
        repository = repo;
    

    public PartialViewResult List()
    
        IEnumerable<User> users = repository.Users;

        UserListViewModel viewModel = new UserListViewModel();
        viewModel.Users = users;
        viewModel.TotalUsers = Membership.GetNumberOfUsersOnline().ToString();

        return PartialView(viewModel);
    

所以我假设管理员的用户和角色工作正常,我可以看到数据库中的全部内容......上面的控制器是抽象的一部分 - >具体映射为特定的会员提供者用户......但我有在 GetAllUsers 行上调试并实际返回空列表,这不是映射出错。

最后我称之为:

            MembershipUserCollection users = Membership.GetAllUsers();

不返回任何用户。

有什么想法吗?

【问题讨论】:

为什么这个问题被否决了?我可以添加更多信息吗?我对 C# 等很陌生。 用户“JIMMYT1988\jimmyt1988”存在吗? 我在我的 OP 中添加了更多内容,说明了为什么我假设用户确实存在。 抱歉,我不明白您是如何创建用户的。您写道:“我在 Global.asax 中添加了我的第一个用户,如下所示:”,但您添加的是角色,而不是用户。您应该从 ASP.NET 配置(Visual Studio -> 项目 -> ASP.NET 配置)中检查当前角色和用户。 Roles.AddUserToRole(@"JIMMYT1988\jimmyt1988", "Admin");它似乎添加了一个用户,然后将该用户分配给一个角色。我在我的数据库中看到我的用户的条目。最后,我的用户/会员资格将在 SQL 中处理......沿着这个章节示例的相同行:weblogs.asp.net/scottgu/archive/2006/07/23/… 【参考方案1】:

首先您需要使用静态Membership.CreateUser method 创建用户:

MembershipUser newUser = Membership.CreateUser(@"JIMMYT1988\jimmyt1988", "password");

然后您可以将该用户添加到角色中。

关于您的评论:

如何创建一个不需要密码但又不需要密码的用户 还能把用户列出来吗?

我不肯定,但我认为您可以将与密码相关的Membership 属性设置为“0”作为密码的“所需长度”。

您可以将其添加到 web.config 的成员资格部分:

minRequiredPasswordLength="0"

【讨论】:

minRequiredPasswordLength 遗憾地不适用于 0。“附加信息:提供的密码无效。密码必须符合为默认提供程序配置的密码强度要求。”

以上是关于我添加了一个用户并将他分配给一个角色,当我使用 Membership.GetAllUsers() 它返回无的主要内容,如果未能解决你的问题,请参考以下文章

分配角色未插入到其相应的模型

将数据库中的数据显示给特定用户(使用角色?)[关闭]

无法使用“角色”包向带有流星的用户添加角色

MVC 添加角色并将其添加到用户

关于 ASP.NET Core 中的授权

使用 keycloak 在 servlet 应用程序中获取用户角色