Search code examples
c#asp.net-mvcasp.net-identity

Rendering HTML Contents according to User Role?


For example: I have to two roles in my application.

1.Administrator // Can perform all CRUD operations on data.

2.Customer // Can only Read the existing data.

In case of returning view to the User according to there role ? Now I have a choice that create two separate views according to roles.

Let see some Code.

public ActionResult Index()
{
    var customers = _dbContext.Customers.Include(c => c.Type).ToList();
    if (User.IsInRole(userRole.IsAdministator))
    {
        return View("Admin_List_View", customers);
    } else
    {
        return View("Customer_ReadOnlyList_View" , customers);
    }
}

In the above code.I have two view.

1.Admin_List_View // This view contains all the Data along with Add,Delete,Update,Edit options.

2.Customer_ReadOnly_View // This view will only contains Readonly list.

So my question is that: In case of simple view i have to follow this approach by writing a separate view for a target roles.

But as it Possible to have a single view and assign the specific section of that to specfic role ?

Note: I am asking this question is that...In case of complex view that i don't have a choice to create another view from scratch for a particular role. So i am wondering that there is any way to play with the existing view.

For example: I have to roles.

Admin & customer

and

i have one view.

How to manage that one view for these to roles?


Solution

  • Possible to have a single view and assign the specific section of that to specfic role ?

    Yes. You can achieve this with Razor syntax which allows C# in your HTML. Prefix your C# statements with "@". See here.

    In your View:

    <button>Do Regular User Stuff</button>
    @if(User.IsInRole("Admin") {
        <button>Do Admin Stuff</button>
    }