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

时间:2013-12-19 10:53:03

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

旁注:我使用的是vs2013 express,并且没有安装任何其他内容。

我正在使用以下身份验证/授权目标构建 Intranet站点

  • 使用Roles类的自定义角色
  • 无需登录,如果您已登录Windows,则可以看到该应用
  • 能够使用[授权(角色=“管理员”)]种属性
  • 能够从UserManagement页面管理用户(创建/删除/列表/编辑)。

我一直在关注此事: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,我被允许进入..而如果我创建用户而不添加角色,则不允许访问...所以这一切都很好并且正常工作

这是我阻止只访问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);
    }
}

所以我假设管理员的用户和角色正常工作,我可以看到数据库中的entires ...上面的控制器是摘要的一部分 - &gt;特别是membershipprovider用户的具体映射......但是我已经在GetAllUsers行上进行了调试,并且实际上返回了空列表,这不是映射出错。

最后我称之为:

            MembershipUserCollection users = Membership.GetAllUsers();

不返回任何用户。

有什么想法吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,您需要使用静态Membership.CreateUser method

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

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

关于你的评论:

  

如何创建一个不需要密码的用户呢?   仍然能够列出用户?

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

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

minRequiredPasswordLength="0"