Я использую ASP.NET MVC4.
Это мои userroles
1. Administrator
2. L1 Admin
3. L2 Admin
У пользователей группы администратора есть разрешение для настроек (добавление, настройки разрешений). Просмотр журналов, отчетов об ошибках и т.д.
Если пользователь является членом группы Administrator, он может видеть только меню, которые связаны с настройками выше.
У меня есть таблица меню, имеющая детали меню. Существуют некоторые функции, такие как "Удалить", "Редактировать", которые отображаются в зависимости от роли текущего пользователя и недоступны в верхнем меню. Удалить ссылку "Редактировать" помещается внутри таблицы, в то время как листинг данных. Это также включено и для этих типов ввода IsVisible является ложным.
MenuID - MenuName - Controller - Action - ParentID - IsVisible
У меня есть таблица roleenen, имеющая меню, которое назначается для каждой роли.
RoleID - MenuID
Если Admininstrator входит в систему, он может видеть все меню. Если L1Admin входит в систему, он может видеть только меню, которое ему назначено.
Я создал настраиваемый атрибут для аутентификации, после чего я запрашиваю базу данных и получаю разрешение для пользователя на основе Contoller и Action (в меню Table входит RoleMenu). Поэтому я могу ограничить запрос, если пользователь пытается получить доступ к действию через URL, набрав в браузере.
Если я вхожу как L1Admin, я могу видеть только страницы списка, и в меню создается корреляция. На странице списка, которую я использую для перечисления. Итак, как я могу скрыть ссылку "Редактировать/Подробнее" на основе Разрешения зарегистрированного пользователя.
<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>
Спасибо заранее.
ИЗМЕНИТЬ
Я храню данные разрешений в базе данных.