Как я должен проверить роли пользователя в представлении? - PullRequest
0 голосов
/ 22 апреля 2020

Я проверяю вошедшие в систему роли пользователя в _LoginPartial.cshtml, чтобы изменить элемент дизайна на основе роли.

Это хороший способ сделать или есть лучший Кстати?

int ix = User.IsInRole("SiteAdmin")
    ? 0
    : User.IsInRole("SysOp")
        ? 1
        : User.IsInRole("SupportAgent")
            ? 2
            : User.IsInRole("GroupAdmin")
                ? 3
                : User.IsInRole("GroupUser")
                    ? 4
                    : 5;

Тогда я использую ix в качестве индексатора в string[] btnDesign[]:

class="btn @(btnDesign[ix])"

Я знаю, что мой чек потенциально вызывает пять отдельных поездок в базу данных, и именно поэтому я задаю этот вопрос.

Обновление Я немного "оптимизировал" его. Видя, что «GroupUser» больше, чем «SiteAdmin», я включил проверку его головы (и удалил одну роль, SupportAgent):

int ix = User.IsInRole("GroupUser")
    ? 0
    : User.IsInRole("GroupAdmin")
        ? 1
        : User.IsInRole("SysOp")
            ? 2
            : User.IsInRole("SiteAdmin")
                ? 3
                : 4;

Теперь проверка, предположительно, будет максимально быстрой для большинства вошедших в систему пользователей, которые являются «GroupUser».

Тем не менее, я хотел бы знать, возможно ли дальнейшее его улучшение.

1 Ответ

1 голос
/ 23 апреля 2020

Вы можете определить отображение ролей на индексы в словаре в некотором удобном месте:

var roleMapping = new Dictionary<string,int>();
roleMapping.Add("SiteAdmin", 0);
...

В вашем коде вы можете получить все роли пользователя за один вызов:

var idUser = UserManager.GetUserAsync(User).Result;
var roles = UserManager.GetRolesAsync(idUser).Result;

Теперь определим «наиболее значимый» индекс, учитывая роли, которые пользователь выполняет через

int significantIndex = roleMapping
                         .Where(kv => roles.Contains(kv.Key))
                         .Select(kv => kv.Value)
                         .Min();

Здесь предполагается, что индекс с наименьшим значением является наилучшим соответствием для текущего пользователя. .

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