1

Предположим, у меня есть ссылка action в макете, которую я хочу показать, если вошедший в систему пользователь находится в одной из двух ролей «Менеджер» или «Продавец», то как мне сделай это? То, что я делаю это следующим образом: -Проверьте UserRole и установите разрешение в макете

@if((User.IsInRole("Manager"))||(User.IsInRole("Salesperson"))) 
{ 
    @Html.ActionLink("Sales Reports", "SalesReports", "Reports") 
} 

К сожалению, выше строка кода не работает. Ссылка «Отчеты о продажах» не отображается пользователям с ролью «Продавец». Я хочу сделать ссылку «Отчеты о продажах» видны только пользователям в роли «Менеджер» или в роли «Продавца». Пожалуйста, посоветуйте, как это сделать? Спасибо.

+0

Вы пытались отладить? Если вы поместите контрольную точку в свой if и войдите в систему с Продавцом, что вы видите? Разве это даже достигается, если? –

+0

Да, он попадает в точку останова при входе в систему с пользователями в обеих ролях. Если вы вошли в систему с ролью Менеджера, он попадает внутрь if-блока, но с ролью Salesperson это не делает. –

+0

Можете ли вы просмотреть роль, которую ваш пользователь имеет при отладке вашего кода? Можете ли вы получить название роли? Это «продавец»? –

ответ

0

Способ MVC, выполняющий роль rolebased, заключается в использовании атрибута [Authorize] для действия или контроллера. Вы можете сказать, whch роли предоставляются следующим образом:

[Authorize(Roles="Manager,Salesperson")] 

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

[Authorize(Roles="Manager,Salesperson")] 
public ActionResult NavigationLinks() 
{ 
    return View("PATH TO PARTIAL"); 
} 
+0

получил ваше мнение. Благодарю. –

0

Должно работать с вашей линией. Может быть, вы допустили ошибку в слове «Продавец»?

Я также совет, чтобы переместить эту логику в контроллер:

public ActionResult YourAction() 
{ 
    bool isAllowed = User.IsInRole("Manager")||User.IsInRole("Salesperson"); 
    ViewBag.isAllowed = isAllowed; 

    ... 
    return View(); 
} 

Чем, на ваш взгляд:

@if((bool)ViewBag.isAllowed) 
{ 
    @Html.ActionLink("Sales Reports", "SalesReports", "Reports") 
} 
+0

Я перепроверяю, и я верю, что нет орфографических ошибок. То, что я пытаюсь сделать, это установить некоторые разрешения на целевой странице в зависимости от UserRole после входа в систему любого пользователя. Я немного смущен тем, где разместить этот ActionResult, который вы упомянули. –

+0

@aritra Вам не нужен отдельный ActionResult. Я имею в виду, что вы можете добавить эти две строки кода (ViewBag) в ActionResult, которые соответствуют вашему представлению, где вы хотите обрабатывать разрешение. –

+0

На самом деле, у меня есть Actionlinks в моем макете. Если я хочу ограничить разрешение для этих ActionLinks в макете, то в каком контроллере я должен добавить вышеупомянутую логику? Здесь я смущаюсь. Надеюсь, у меня есть смысл для тебя, Джон. –

Смежные вопросы