2016-07-27 53 views
1

我正在嘗試創建帶身份的授權。是否有可能使用Identity來保存帶枚舉參數的角色?

到目前爲止eveything正在與我在網上找到的指導方針一起工作。

但是我想修改角色的保存。我創建了一個枚舉,並將此枚舉保存到aspNetRoles表(代碼如下)。

作用被保存到用戶的方式是通過以下事項:

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

我不是一個字符串作爲第二paramater發送的粉絲,並希望派一個枚舉來代替。

這可能嗎?

我迄今爲止代碼:

修改aspnetRoles表通過添加自定義屬性:

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 
} 

將在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 protected]"; 
     user.FirstName = "Myname"; 
     user.LastName = "LastName"; 

     string userPWD = "[email protected]"; 

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

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

正如我上面我所提到的不希望擁有角色名稱屬性,我想使用枚舉,這是如何完成的?

編輯: PIC aspNetRoles的:

enter image description here

+1

怎麼樣'RoleId.Developer.ToString()'呢? – DavidG

+0

這將是一個快速修復。雖然我的意圖不完全是這樣,但如果案件只是不加硬編碼字符串,那麼這將解決問題,但如果我刪除名稱屬性entierly,只專注於保存枚舉? – ThunD3eR

+0

那麼你的枚舉是否與角色ID匹配? – DavidG

回答

1

UserManager.AddToRoleextension method,所以你可以寫類似的方法給你的用戶添加到您的角色:

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; 
} 

但也許這種情況需要不同的方法。 "Admin"不是一個魔術常數,但它是一個常數。如果你想重命名"Admin""Administrator"?字符串常量重命名操作很困難,可能存在錯誤。

你可以做什麼是你的角色申報命名常量:

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); 
1
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 protected]"; 
    user.FirstName = "Myname"; 
    user.LastName = "LastName"; 

    string userPWD = "[email protected]"; 

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

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

如果添加Developer.ToString(),那麼這將工作,但它超出了範圍。我在問是否可以在不包含角色名稱的情況下保存角色,只需使用我提供的枚舉 – ThunD3eR

相關問題