Разница между user.isinrole и IsInRoleAsync (пользователь TUser, строковая роль) - PullRequest
0 голосов
/ 31 января 2019

Я из MVC и только начал работать над ASP.Net Core.Я использую Identity для аутентификации.

Для авторизации, в MVC я использовал:

if(User.IsInRole("TestRole"))

В .Net Core это выглядит как:

if(await IsInRoleAsync(User,"TestRole"))

Исходя из моих первоначальных впечатлений, похоже, что MVC использовался для проверки заявок, когда Core проверяет базу данных каждый раз.Правильно ли я в своем предположении и что каждый раз, когда метод вызывается в Core, происходит отключение БД?

Если бы он каждый раз проверял данные из БД, то не будет ли это дорогой операцией и как это происходит?Выгода от проверки претензий?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Идентичность теперь зависит от реализации UserStore<TUser>, назначенной на UserManager<TUser> в использовании.Если вы используете пакет Entity Framework, реализация UserStore<TUser> всегда сверяется с базой данных.

Вы можете создать свое собственное UserStore<TUser> и проверить свойство Claims Controller.User или даже выполнить какое-либо кэширование после получения заявок в первый раз.Вам решать, что вы используете, и как вы кешируете / обновляете эти значения.

Обратите внимание, что предыдущие реализации выполняли синхронный вызов базы данных, если заявки еще не были получены, поэтому вы должны быть благодарны, что теперь это IsInRoleAsync.

0 голосов
/ 31 января 2019

Из исходного кода вы можете видеть, что он использует DbSet

public TContext Context { get; private set; }

private DbSet<TUser> UsersSet { get { return Context.Set<TUser>(); } }
private DbSet<TRole> Roles { get { return Context.Set<TRole>(); } }
private DbSet<TUserClaim> UserClaims { get { return Context.Set<TUserClaim>(); } }
private DbSet<TUserRole> UserRoles { get { return Context.Set<TUserRole>(); } }
private DbSet<TUserLogin> UserLogins { get { return Context.Set<TUserLogin>(); } }
private DbSet<TUserToken> UserTokens { get { return Context.Set<TUserToken>(); } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...