简体   繁体   English

如何遍历一组用户并将其添加到C#中

[英]How can I loop through a set of users and add these in C#

I have some code that sets up a user: 我有一些设置用户的代码:

const string name = "joe";
const string password = "abc";
const string roleName = "def";

After this there is a lot of C# code to add the user: 之后,有很多C#代码可添加用户:

var role = RoleManager.FindByName(roleName);
if (role == null) {
    role = new IdentityRole(roleName);
    var roleresult = RoleManager.Create(role);
}

var user = UserManager.FindByName(name);
if (user == null) {
    user = new ApplicationUser { UserName = name, Email = name };
    var result = UserManager.Create(user, password);
    result = UserManager.SetLockoutEnabled(user.Id, false);
}

// Add user admin to Role Admin if not already added
var rolesForUser = UserManager.GetRoles(user.Id);
if (!rolesForUser.Contains(role.Name)) {
    var result = UserManager.AddToRole(user.Id, role.Name);
}

What I need is to add four or five different users. 我需要添加四个或五个不同的用户。
Is there a way I can put my users in an object and loop through this calling the adding code ? 有没有一种方法可以将我的用户放在一个对象中,并通过调用添加代码循环遍历?

There certainly is a way! 当然有办法! But to do it properly, it will take a few steps to get there. 但是要正确执行此操作,将需要一些步骤才能达到目标。 First, create a small class to represent a "user". 首先,创建一个小类来表示“用户”。 Here's one with a constructor and some auto-properties: 这是一个带有构造函数和一些自动属性的代码:

public class MyUser
{
    public MyUser(string name, string password, string roleName)
    {
        this.Name = name;
        this.Password = password;
        this.RoleName = roleName;
    }
    public string Name { get; set; }
    public string Password { get; private set; }
    public string RoleName { get; set; }
}

Disclaimer : Don't call this class MyUser , come up with a much better name! 免责声明 :请勿将此类MyUser ,请使用更好的名称! This is for illustration only! 这仅用于说明!

Now, to put your users "in an object", you can create a List<T> object and add some new MyUser instances to it: 现在,要将您的用户“放在一个对象中”,您可以创建一个List<T>对象,并向其中添加一些新的MyUser实例:

var newUsers = new List<MyUser>
{
    new MyUser("name1", "pwd1", "role1"),
    new MyUser("name2", "pwd2", "role2"),
    etc.
};

This creates the list and immediately adds the users to it using collection initializer syntax. 这将创建列表,并立即使用集合初始化语法将用户添加到列表中。 You can also do it the long way if you need to do it in a loop: 如果您需要循环执行,也可以做很多事情:

var newUsers = new List<MyUser>();
newUsers.Add(new MyUser("name1", "pwd1", "role1"));
newUsers.Add(new MyUser("name2", "pwd2", "role2"));
// etc.

Next, having your "create user" code in a function will help, but in one that takes a MyUser class as a parameter: 接下来,在函数中使用“创建用户”代码会有所帮助,但是在将MyUser类作为参数的函数中:

public void CreateUser(MyUser myUser)
{
    // A little protection
    if (myUser == null)
        throw new ArgumentNullException("user");

    var role = RoleManager.FindByName(myUser.RoleName);
    if (role == null) {
        role = new IdentityRole(myUser.RoleName);
        var roleresult = RoleManager.Create(role);
    }

    var user = UserManager.FindByName(myUser.Name);
    if (user == null) {
        user = new ApplicationUser { UserName = myUser.Name, Email = myUser.Name };
        var result = UserManager.Create(user, myUser.Password);
        result = UserManager.SetLockoutEnabled(user.Id, false);
    }

    // Add user admin to Role Admin if not already added
    var rolesForUser = UserManager.GetRoles(user.Id);
    if (!rolesForUser.Contains(role.Name)) {
        var result = UserManager.AddToRole(user.Id, role.Name);
    }
}

Now, to finally create the users, you just have to loop through your list of MyUser s and pass them over to the CreateUser() function: 现在,要最终创建用户,您只需要遍历MyUser的列表,并将它们传递给CreateUser()函数:

foreach (var user in newUsers)
{
    CreateUser(user);
}

Of course, you'll want to incorporate try/catch blocks where necessary, add proper validation, etc. This is just to illustrate how I would approach this. 当然,您将需要在必要时合并try/catch块,添加适当的验证等。这仅是为了说明我将如何实现这一点。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM