ASP.Net MVC 5 Проверка роли пользователя для _Layout - PullRequest
0 голосов
/ 01 апреля 2019

Привет всем. Я пытаюсь проверить роль моего пользователя с настройками по умолчанию. Я думал, что мне понадобится только User.IsInRole ("User") для моего просмотра, но это не так просто. Я хочу отображать определенные ссылки в зависимости от роли пользователя. Вот что у меня есть, и я попробовал несколько разных вариантов. У меня есть база данных по умолчанию и некоторые добавленные таблицы, которые не имеют значения для этой части. Request.IsAuthenticated работает для входа в систему.

Я пробовал user.isinrole и request.isauthenticated, но nether работал для этого экземпляра с моим представлением

@if (Request.IsAuthenticated)
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">Assign Roles</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">View Roles</a>
                        </li>                        
                        <li class="nav-item">
                            <a class="nav-link" href="#">Reset Password</a>
                        </li>
                    } else if (Request.IsAuthenticated && User.IsInRole("User"))
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">user Else clause</a>
                        </li>
                    } else if (Request.IsAuthenticated && User.IsInRole("Guest"))
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">guest Else clause</a>
                        </li>
                    } else
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">else else!! Else clause</a>
                        </li>
                    }

'else' работает, когда ни один пользователь не вошел в систему.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Вы можете добавить метод расширения для принципала, как это

public static class PrincipalExtensions
{
    public static bool IsInAllRoles(this IPrincipal principal, params string[] roles)
    {
        return roles.All(r => principal.IsInRole(r));
    }

    public static bool IsInAnyRoles(this IPrincipal principal, params string[] roles)
    {
        return roles.Any(r => principal.IsInRole(r));
    }
}

И используйте

// user must be assign to all of the roles  
if(User.IsInAllRoles("Admin","Manager","YetOtherRole"))
{
    // do something
} 

Подробнее на Использование User.IsInRole () в представлении

1 голос
/ 01 апреля 2019

Это то, что я сделал для моего решения

@if (User.IsInRole("User"))
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">user Else clause</a>
                        </li>
                    } 
                    @if (User.IsInRole("Guest"))
                    {
                        <li class="nav-item">
                            <a class="nav-link" href="#">guest Else clause</a>
                        </li>
                    }
...