asp.net 仅允许 MVC EF 6 标识选择'lower'角色



我在identity中设置了这些角色,每个用户分配一个角色

00 - Super Admin
10 - Admin
20 - Staff Manager
30 - Staff
40 - User Manager
50 - User

目的是允许用户更改低于(不等于)自己的用户角色的其他用户的角色

所以如果我能从添加到当前用户的角色的Name中获得前两个字符,例如30,那么可以应用于其他用户的角色选择将是>30

获取当前用户

的用户状态
var currentUser = await _userManager.GetUserAsync(HttpContext.User);
var currentUserRole = await _userManager.GetRolesAsync(currentUser);

然后像下面这样得到所有的角色,用'WHERE'子句,或者在if语句后面,前两个字符>当前用户前两个字符

var allRoles = _roleManager.Roles.ToList();

有没有人知道这样做的方法,或者是否有更好的主意?

多谢编辑:

好了,我现在把它硬编码为视图中的SelectList,选择角色> 30,它正在工作

ViewBag.allRoles = _roleManager.Roles.Where(a => Convert.ToInt32(a.Name.Remove(2)) > 30).Select(a => new SelectListItem()
{
Value = a.Id.ToString(),
Text = a.Name.Remove(0, 5).ToString(),
}).ToList();

只需要将当前用户角色名称转换为字符串?

我已经整理好了

var currentUser = await _userManager.GetUserAsync(HttpContext.User);
var currentUserRole = await _userManager.GetRolesAsync(currentUser);
int currentUserRoleLevel = int.Parse(currentUserRole[0].Remove(2));
ViewBag.allRoles = _roleManager.Roles.Where(a => Convert.ToInt32(a.Name.Remove(2)) > currentUserRoleLevel).Select(a => new SelectListItem()
{
Value = a.Id.ToString(),
Text = a.Name.Remove(0, 5).ToString(),
}).ToList();

问题仍然存在,有没有更好的方法?

最新更新