How to Show or hide controls based on roles - ASP.NET MVC 4 Razor
You can use Following code for role based checking
@if(Request.IsAuthenticated){ if(User.IsInRole("Admin")) { <Ul Class="SubMenuItem"> <li> this menu item is for Admin role</li> </Ul> } if(User.IsInRole("User")) { <Ul Class="SubMenuItem"> <li> this menu item is for User role</li> </Ul> }}@* For unknown user *@else{ <Ul Class="SubMenuItem"> <li> this menu item is for Unknown user</li> </Ul>}
Typically you would want to keep your views as clean as possible with little to no logic.I would suggest moving your role checking logic into a controller action and rendering a partial view based on the users role.
You can use ChildActions and the Html.Action extension method to get this wired up.
From MSDN:
A child action method renders inline HTML markup for part of a view instead of rendering a whole view. Any method that is marked with ChildActionOnlyAttribute can be called only with the Action or RenderAction HTML extension methods.
In your project, create a new Controller called Dashboard and added a single Action called BuildTable.
public class DashboardController : Controller{ [ChildActionOnly] public ActionResult BuildTable() { if (Roles.IsUserInRole("Administrator")) { return PartialView("_AdminTable"); } return PartialView("_SupportTable"); }}
Include the following line in the view where you want the dashboard table to appear.
@Html.Action("BuildTable", "Dashboard")
I have done something similar. The way I did it (may not be the best)
is to send a boolean back to the view
in the controller use:
bool showSection1 = true;bool showSection2 = false;ViewData["showSection1"] = showSection1;ViewData["showSection2"] = showSection2;/// may be better to use a viewmodel here rather than ViewData
then in the view:
@if((bool)ViewData["showSection1"]){ @{Html.RenderPartial("section1");}}@if((bool)ViewData["showSection2")){ @{Html.RenderPartial("Section2");}}
you will need to do the logic to set the boolean the way you want them but this should be a start.
you could also create a static method that returns the role and then get that value directly from the view. this may be bad form though.
@if(AppHelper.GetRole().equals("role1")){ //show the partial}
then create a class called AppHelper and a method called GetRole that returns the role of the user.