Is it possible to save a role with enum parameter using Identity?

廉价感情. 提交于 2019-12-24 09:24:13

问题


I am experimenting with creating a authorization with identity.

So far eveything is working with the guidlines I have found online.

However I want to modify the saving of roles. I have created an enum and I save this enum to aspNetRoles table (code will follow below).

The way a role is saved to a user is via the following:

UserManager.AddToRole(user.Id, "Admin");

I am not a fan of sending in a string as a second paramater and wish to send an enum instead.

Is this possible?

My code so far:

modification to aspnetRoles table by adding a custom property:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    new public DbSet<ApplicationRole> Roles { get; set; }
}

public class ApplicationRole : IdentityRole
{
    [Required]
    public RoleId roleId { get; set; }
}

public enum RoleId
{
    Developer = 0,
    Administrator = 1,
    Other = 2
}

adding a role in startup.cs:

    if (!roleManager.RoleExists("Developer"))
    {
        // first we create Admin rool   
        var role = new ApplicationRole();
        role.Name = "Developer";
        role.roleId = RoleId.Developer;

        roleManager.Create(role);

        //Here we create a Admin super user who will maintain the website                  
        var user = new ApplicationUser();
        user.UserName = "ra3iden";
        user.Email = "Email@gmail.com";
        user.FirstName = "Myname";
        user.LastName = "LastName";

        string userPWD = "A@Z200711";

        var chkUser = UserManager.Create(user, userPWD);

        //Add default User to Role Admin   
        if (chkUser.Succeeded)
        {
            var result1 = UserManager.AddToRole(user.Id, "Developer");
        }
    }

As I mentioned above I don't wish to have the rolename property, I want to use the enum instead, how is this done?

EDIT: pic of aspNetRoles:


回答1:


UserManager.AddToRole is an extension method, so you can write similar method to add your users to your roles:

public static IdentityResult AddToRole<TUser, TKey>(
this UserManager<TUser, TKey> manager,
TKey userId,
RoleId role
)
where TUser : class, Object, IUser<TKey>
where TKey : Object, IEquatable<TKey>
{
    return manager.AddToRoleAsync(userId, role.ToString())
                  .Result;
}

But maybe this situation requires a different approach. "Admin" is not a magic constant, but it's a constant. What if you'll want rename "Admin" to "Administrator"? String constant renaming is difficult operation with possible errors.

What you can do is to declare named constant for your roles:

public static class Role
{
    public const string Admin = "Admin";
    public const string Developer = "Developer";
    public const string Other = "Other";
}

. . .

UserManager.AddToRole(user.Id, Role.Admin);



回答2:


public enum Roles
{
  Developer,
  Manager
 }

if (!roleManager.RoleExists(Roles.Developer))
{
    // first we create Admin rool   
    var role = new ApplicationRole();
    role.Name = Roles.Developer;
    role.roleId = RoleId.Developer;

    roleManager.Create(role);

    //Here we create a Admin super user who will maintain the website                  
    var user = new ApplicationUser();
    user.UserName = "ra3iden";
    user.Email = "Email@gmail.com";
    user.FirstName = "Myname";
    user.LastName = "LastName";

    string userPWD = "A@Z200711";

    var chkUser = UserManager.Create(user, userPWD);

    //Add default User to Role Admin   
    if (chkUser.Succeeded)
    {
        var result1 = UserManager.AddToRole(user.Id, Roles.developer);
    }
}


来源:https://stackoverflow.com/questions/38612771/is-it-possible-to-save-a-role-with-enum-parameter-using-identity

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!