Есть и другие способы сделать это, но вы должны рассмотреть, следует ли им следовать СУХОЙ, делая это. А также учитывая, что ваши взгляды не должны быть слишком сложными.
Менее очевидный способ
Напишите методы расширения Html (для тех элементов, которые вам нужны), которые также принимают набор прав в качестве параметра и отображают их содержимое на их основе. Как:
<%= Html.ActionLink(new PermissionRight[] { PermissionRight.Edit, PermissionRight.Create }, "Edit", ...) %>
Таким образом, вы сможете предоставить все права, которые могут предоставлять такую функциональность, и это будет общим для всех представлений / частичных значений ... Если вы определите перечисление PermissionRight
как флаги, вы можете предоставить их без массивов .
Обычный (очевидный) способ
Вы бы либо написали свой собственный базовый вид или класс базового контроллера и выставили бы своего пользователя (или, по крайней мере, необходимые данные) прямо в нем. И правильного типа, поэтому не требуется кастинг.
Тогда просто используйте такие как (у этого есть базовый класс представления):
<% if (this.User.HasWritePermission) %>
<% { %>
<%= Html.ActionLink("Edit", ...) %>
<% } %>
Вы можете видеть, что это решение требует больше строк для выполнения той же задачи, чем первая, таким образом загрязняя ваши представления гораздо большим количеством кода, чем необходимо.