旁注:我使用的是vs2013 express,并且没有安装任何其他内容。
我正在使用以下身份验证/授权目标构建 Intranet站点:
但我不确定如何创建/列出用户...这是我到目前为止所拥有的:
我添加了一个用户并将他分配给一个角色,当我使用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();
不返回任何用户。
有什么想法吗?
答案 0 :(得分:0)
首先,您需要使用静态Membership.CreateUser method:
创建用户MembershipUser newUser = Membership.CreateUser(@"JIMMYT1988\jimmyt1988", "password");
然后您可以将该用户添加到该角色。
关于你的评论:
如何创建一个不需要密码的用户呢? 仍然能够列出用户?
我不是肯定的,但我认为您可以设置与密码相关的Membership属性,使“0”成为密码的“必需长度”。
您可以将其添加到web.config的成员资格部分:
minRequiredPasswordLength="0"