c# - 我添加了一个用户并将他分配给一个角色,当我使用 Membership.GetAllUsers() 时它没有返回

标签 c# asp.net member asp.net-mvc-5 sqlmembershipprovider

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

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

  • 使用角色类自定义角色
  • 无需登录,如果您已登录 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");
        }

用户和角色正在工作,因为如果我阻止对 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);
    }
}

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

最后我称之为:

            MembershipUserCollection users = Membership.GetAllUsers();

不返回任何用户。

有什么想法吗?

enter image description here

最佳答案

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

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

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

关于您的评论:

How do I go about creating a user that doesn't need a password and yet still be able to list the users out?

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

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

minRequiredPasswordLength="0"

关于c# - 我添加了一个用户并将他分配给一个角色,当我使用 Membership.GetAllUsers() 时它没有返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20679744/

相关文章:

c++ - 如何为特定类(如STL容器)的成员函数或变量创建别名

c# - Visual Studio 忽略输出文件夹中的 PDB 文件(来自 NUGET 包)

c# - 如何正确地将 .NET 字符串编码为 native 代码的 std::wstrings?

C# 斐波那契函数返回错误

c# - asp 菜单项是否应该绑定(bind)到每个页面请求

c++ - 是否可以在 C++ 的成员初始化列表中初始化数组?

c# - Rx 和异步 nunit 测试

c# - 在 ASP.NET C# 和 Razor 变量中编写 HTML 代码

asp.net - OpenCover - 针对正在运行的 ASP.NET 应用程序测量覆盖率

c++ - 使用函数调用初始化字符串成员 c++