尝试获取标识中的所有角色

本文关键字:角色 获取 标识 | 更新日期: 2023-09-27 18:31:47

我正在尝试获取应用程序中所有角色的列表。我看了以下帖子 获取所有用户...和其他来源。这是我的代码,我认为这是我应该做的。

var roleStore = new RoleStore<IdentityRole>(context)
var roleMngr  = new RoleManager<IdentityRole>(roleStore);
List<string> roles = roleMngr.Roles.ToList();

但是,我收到以下错误:无法将类型 GenericList(IdentityRole) 隐式转换为 List(string) 。有什么建议吗?我正在尝试获取列表,以便我可以在注册页面上填充下拉列表以将用户分配给特定角色。使用 ASPNet 4.5 和身份框架 2(我认为)。

PS 我也尝试过 Roles.GetAllRoles 方法,但没有成功。

尝试获取标识中的所有角色

查看您的参考链接并自行提问,很明显角色管理器(roleMngr)是IdentityRole的类型,因此如果您尝试获取角色列表,则角色必须是相同的类型。

使用var而不是List<string>或使用List<IdentityRole>

var roleStore = new RoleStore<IdentityRole>(context);
var roleMngr = new RoleManager<IdentityRole>(roleStore); 
var roles = roleMngr.Roles.ToList();

希望这有帮助。

如果是您要查找的字符串角色名称列表,则可以执行

List<string> roles = roleMngr.Roles.Select(x => x.Name).ToList();

我个人会使用 var,但在此处包含类型以说明返回类型。

dotnet5中,我只是使用了这个RoleStore,不需要RoleManager

var roleStore = new RoleStore<IdentityRole>(_context);
List<IdentityRole> roles = roleStore.Roles.ToList();

添加此内容以帮助可能具有自定义类型Identity(不是默认string)的其他人。如果你有,比方说int,你可以使用它:

var roleStore = new RoleStore<AppRole, int, AppUserRole>(dbContext);
var roleMngr = new RoleManager<AppRole, int>(roleStore);
public class AppUserRole : IdentityUserRole<int> {}
public class AppRole : IdentityRole<int, AppUserRole> {}

我宁愿不使用"var",因为它不能用于类范围的字段,如果不能初始化为 null 和许多其他限制。无论如何,这会更干净,它对我有用:

RoleStore<IdentityRole> roleStore = new RoleStore<IdentityRole>(_context);
RoleManager<IdentityRole> roleMngr = new RoleManager<IdentityRole>(roleStore);
List<IdentityRole> roles = roleMngr.Roles.ToList();

然后,您可以将列表"角色"强制转换为任何类型的列表(只需将其转换为字符串列表或 SelectListItem 列表),例如,在这种情况下,如果您想在这样的选择标签中显示它:

 <select class="custom-select" asp-for="Input.Role" asp-items="
 Model._Roles"> </select>

您可以将"_Roles"定义为接收"角色"列表作为值的RegisterModel属性。