旁注:我使用的是 vs2013 express,没有安装任何其他东西。
我正在构建一个具有以下身份验证/授权目标的Intranet 站点:
- 使用角色类自定义角色
- 无需登录,如果您已登录 Windows,则可以查看该应用
- 能够使用 [Authorise(Roles="Admin")] 类属性
- 能够从用户管理页面管理用户(创建/删除/列出/编辑)。
但我不确定如何创建/列出用户...这是我目前所拥有的:
我添加了一个用户并为其分配了一个角色,当我使用 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();
不返回任何用户。
有什么想法吗?
最佳答案
首先,您需要使用静态 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/