2013-08-20 3 views
11

Так что это может показаться глупым вопросом, но как показать ссылку только для пользователя-администратора?Скрытие ссылок из определенных ролей в ASP.NET MVC5

Предположим, обычный пользователь видит следующие ссылки:
Главная/О компании/Контакты

И-пользователя админ видит следующие ссылки:
Главная/О компании/Контакты/администратора

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

Могут ли виды быть перегружены?

+0

Это не просто скрыть, вы должны оценить роль пользователя, вошедшего ... есть так много ответа на этот вид вопрос –

ответ

30

В зависимости от того, какого рода членства/поставщика услуг вы используете, вы должны просто проверить непосредственно из представления, если пользователь зарегистрирован и находится в конкретной роли.

Итак, у вас будет что-то вроде;

@Html.ActionLink("Index", "Home") 
@Html.ActionLink("About", "Home") 
@Html.ActionLink("Contact", "Home") 
@if (User.Identity.IsAuthenticated){ 
    if (User.IsInRole("Admin")){ 
     @Html.ActionLink("Admin", "AdminController")   
    } 
} 

И не забудьте добавить [Authorize] атрибут вашего метода Admin действия:

[Authorize(Roles="Admin")] 
public ActionResult Admin() 
{ 
    // ... 
    return View(); 
} 
+1

Является лучшей практикой (или, возможно, из-за ясности), чтобы проверить, аутентифицирован ли пользователь ** и **, если они находятся в определенной роли? Как я полагаю, они не будут в какой-либо роли, если они не сообщают сайту, кто они, что подразумевает предварительную аутентификацию. Обратите внимание, что я ** не ставил под сомнение ** выбор, но ** просто интересно **. Мои навыки в области безопасности подобны пингвинам в полете - видели, как другие это делают, никогда не делали. (Разница в том, что я использую праздники, чтобы амбициозно изменить это состояние, в отличие от ленивых пингвинов, hihi.) –

+0

Атрибут 'Authorize' будет проверять подлинность пользователя по умолчанию, а затем вы можете дополнительно добавить роли. –

+1

О, я понимаю, что это было неясно (видимо, чтение ума не ваша сильная сторона, хе-хе). Я имею в виду строки 4 и 5 в ** первом ** образце (файл CSHTML, разметка Razor). –