Техника ASP.NET MVC 2 для скрытия части представления на основе разрешений пользователя - PullRequest
2 голосов
/ 30 августа 2010

Как лучше всего скрывать часть вида в зависимости от учетных данных пользователя?

Чтобы объяснить себя немного лучше, и в качестве примера у меня есть следующий код на мой взгляд:

<%= this.Model.Name %> <%=Html.ActionLink("Edit",....)%>

И я хотел бы скрыть кнопку редактирования для тех, кто, например, не является администратором ...

Не могли бы вы мне помочь?

Заранее большое спасибо.

С наилучшими пожеланиями.

Ответы [ 2 ]

2 голосов
/ 30 августа 2010

Есть и другие способы сделать это, но вы должны рассмотреть, следует ли им следовать СУХОЙ, делая это. А также учитывая, что ваши взгляды не должны быть слишком сложными.

Менее очевидный способ

Напишите методы расширения Html (для тех элементов, которые вам нужны), которые также принимают набор прав в качестве параметра и отображают их содержимое на их основе. Как:

<%= Html.ActionLink(new PermissionRight[] { PermissionRight.Edit, PermissionRight.Create }, "Edit", ...) %>

Таким образом, вы сможете предоставить все права, которые могут предоставлять такую ​​функциональность, и это будет общим для всех представлений / частичных значений ... Если вы определите перечисление PermissionRight как флаги, вы можете предоставить их без массивов .

Обычный (очевидный) способ

Вы бы либо написали свой собственный базовый вид или класс базового контроллера и выставили бы своего пользователя (или, по крайней мере, необходимые данные) прямо в нем. И правильного типа, поэтому не требуется кастинг.

Тогда просто используйте такие как (у этого есть базовый класс представления):

<% if (this.User.HasWritePermission) %>
<% { %>
    <%= Html.ActionLink("Edit", ...) %>
<% } %>

Вы можете видеть, что это решение требует больше строк для выполнения той же задачи, чем первая, таким образом загрязняя ваши представления гораздо большим количеством кода, чем необходимо.

2 голосов
/ 30 августа 2010

В вашем контроллере, когда вы аутентифицируете пользователя, вы можете передать дополнительные члены представлению, например isAdmin в объекте Model.

Если пользователь является администратором, установите для isAdmin значение true.

По вашему мнению, визуализируйте кнопку Изменить, если isAdmin имеет значение true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...