身份2.1 -检查是否存在角色,如果不在角色中则默认为基本用户

本文关键字:角色 默认 用户 检查 是否 身份 存在 如果不 | 更新日期: 2023-09-27 17:51:05

我正在c#, MVC和ASP中使用此控制器代码。NET身份:

var role = (from r in context.Roles where r.Name.Contains("SuperAdmin") || r.Name.Contains("ReadOnlyAdmin") select r).FirstOrDefault();
var roleusers = context.Users.Where(x => x.Roles.Select(y => y.RoleId).Contains(role.Id)).ToList();
                if (roleusers.Find(x => x.Id.Equals(userDetails.Id)) != null)
                {
                    await UserManager.AddToRoleAsync(userDetails.Id, "User");    
                }

目标是让它检查用户是"超级管理员"还是"ReadOnlyAdmin",如果不是,将其分配给用户。我不是最伟大的lambdas,所以我确定这可能是愚蠢的,但我不知道什么是错的!有人能给我指路吗?

编辑:

澄清-这是管理员在编辑系统中的其他人,而不是他自己。

Edit 2:此代码路径用于更新和注册新用户。下面的建议允许保留现有用户,但新用户没有角色。抱歉之前没有说清楚

身份2.1 -检查是否存在角色,如果不在角色中则默认为基本用户

我不确定上下文是在你的问题。通常在ASP中。Net Identity,你可以这样做-

string userId = userDetails.Id;
IList<string> assingedRoles = await UserManager.GetRolesAsync(userId);
if (!assingedRoles.Contains("SuperAdmin") && 
    !assingedRoles.Contains("ReadOnlyAdmin"))
{
    await UserManager.AddToRoleAsync(userId, "User");
}
// UserManager
private AppUserManager UserManager
{
    get { return HttpContext.GetOwinContext().GetUserManager<AppUserManager>(); }
}

如果我理解正确的话,我相信您只是想要以下内容:

if (!HttpContext.User.IsInRole("SuperAdmin") || HttpContext.User.IsInRole("ReadOnlyAdmin"))
{
    await UserManager.AddToRoleAsync(userDetails.Id, "User");
}

如果用户不在"超级管理员"或";ReadOnlyAdmin"角色,将其添加到角色"用户"中。

<标题>编辑

好的,在这种情况下,试试这样做。

// get SuperAdmin role
var superAdmin = (from r in context.Roles where r.Name.Contains("SuperAdmin") select r).FirstOrDefault();
// get ReadOnlyAdmin role
var readOnlyAdmin = (from r in context.Roles where r.Name.Contains("ReadOnlyAdmin") select r).FirstOrDefault();
// get users in either role
var roleusers = context.Users.Where(x => x.Roles.Select(y => y.RoleId).Contains(superAdmin.Id) || x.Roles.Select(z => z.RoleId).Contains(readOnlyAdmin.Id)).ToList();
// if the user doesn't exist in roleusers
if (roleusers.Find(x => x.Id.Equals(userDetails.Id)) == null)
{
    await UserManager.AddToRoleAsync(userDetails.Id, "User");    
}