ASP.NET MVC - How to hide or Show a link/button based on logged in User's Role permission?

asp.net-mvc, asp.net-mvc-3, c#

Solution

For example, you can do it in a way like this:

@if (ViewContext.HttpContext.User.IsInRole("Your role"))
{
    // Do something here
}

Problem

I am using ASP.NET MVC4. This is my userroles ``` 1. Administrator 2. L1 Admin 3. L2 Admin ``` Administrator group users have permission for Settings(used adding , permission settings). View Logs, Error Reports etc. If a user is a member for Administrator group, he can see only menus which are related ti above settings. I have a menu table, having menu details. There are some functions like Delete,Edit which are shown based on the role of the current user and not availble in the top Menu . Delete,Edit link is placed inside a table while Listing the data. That also included and for that types of entry , IsVisible is false. ``` MenuID - MenuName - Controller - Action - ParentID - IsVisible ``` I have a roleMenu table, having menu which are assigned to each roles. ``` RoleID - MenuID ``` If Admininstrator is logging in, he can see all menus. If L1Admin is logging in , he can only see menu which are assigned to him. I created a custom attribute for authentication and after that I query the database and get the permission for the user based on the Contoller and Action (table Menu joins RoleMenu). So I can restrict a request if the user tries access an action through URL by typing in browser. If I am entering as L1Admin, I can only see the List Pages and the menu is created correclty. In the list page I am using for listing. So how can I hide the Edit/Details link based on the Permission of logged in user. ``` <div style="float: left"> <table width="50%"> <tr> <th> @Html.DisplayNameFor(model => model.Name) </th> <th> </th> </tr> @foreach (var item in Model) { <tr> <td style="width:30%;"> @Html.DisplayFor(modelItem => item.Name) </td> <td style="width:20%;"> // I need to hide EDIT/DELETE based on the permission setting of Current logged in user. @Html.ActionLink("Edit", "Edit", new { id = item.ID }) | <a href="Server/@item.ID">Details</a> | @Html.ActionLink("Delete", "Delete", new { id = item.ID }) </td> </tr> } </table> </div> ``` Thanks in advance. EDIT I am storing the permission details in a database.

Original source