Предотвращение дублирования заявок, добавленных с помощью AddClaimAsync - PullRequest
0 голосов
/ 14 мая 2018

Мы используем ASP.NET Identity в приложении MVC 5. У нас есть страница, которая позволяет пользователям и их претензиям быть добавленными администратором. Тем не менее, используя следующие строки, я могу продолжать добавлять пользователя с той же заявкой роли, создавая таким образом повторяющиеся элементы (таблица AspNetUserClaims имеет столбец «автонумерация» для первичного ключа, поэтому мы можем продолжать добавлять ту же роль к той же самой пользователь):

var userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
await userManager.AddClaimAsync("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    new Claim(ClaimTypes.Role, "SomeRole"));

Обратите внимание, что я добавляю претензию для произвольного пользователя, а не для входа в систему. Если бы это был зарегистрированный пользователь, я мог бы просто позвонить User.IsInRole("SomeRole"). И xxxx - это GUID пользователя.

В этом сценарии я собираюсь использовать следующий вызов БД для проверки перед добавлением роли:

public static async Task<bool> UserHasClaim(string userId, 
    string claimType, string claimValue)
{
    using (var db = new MyEntities())
    {
        return await db.AspNetUserClaims
            .AnyAsync(x => x.UserId == userId && x.ClaimType == 
                  claimType && x.ClaimValue == claimValue);
    }
}

Есть ли лучший способ сделать это? Я знаю, что ClaimsPrincipal содержит метод .HasClaim(...), но я не могу понять, как создать ClaimsPrincipal для этого пользователя и затем запустить метод. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...