Лучший способ создать способ, которым я делаю пользовательские разрешения для полей просмотра - PullRequest
1 голос
/ 12 января 2011

Итак, в настоящее время в нашем коде у нас есть несколько классов по доступу к ролям и разрешениям для определенных пользователей, вошедших в веб-приложение.Это хорошо и хорошо работает.Однако определенное требование, которое возникло сейчас, - это не только возможность ограничивать определенные страницы (целые представления) определенными разрешениями, но также и конкретные поля в этих представлениях.Таким образом, у вас может быть возможность видеть представление, но у вас может быть только разрешение, которое позволяет вам видеть определенные поля на этой странице.

Мы генерируем большинство наших полей с помощью HTML Helpers с в ASP.NET/C#,Например, вот что нам нужно заблокировать / показать в зависимости от разрешения:

<%= Html.CheckBoxFor(m => m.Current, new { @class = "economicTextBox", propertyName = "Current", onchange = "UseCurrent();UpdateField(this);" })%>

Моей первой мыслью было просто воспроизвести проверку разрешений в аналогичном встроенном коде C # прямо перед этим и поместить HTML Helper.в операторе "if", поэтому он будет отображаться только в том случае, если у пользователя есть разрешение.Во-вторых, я догадалась, когда увидела, что передняя часть становится очень раздутой со всеми этими утверждениями в моей голове, и подумала, что может быть лучший способ сделать это.Спасибо.

Ответы [ 2 ]

2 голосов
/ 12 января 2011

Моей первой мыслью было просто сыграть проверьте разрешения в аналогичных встроенный код C # прямо перед этим и Поместите HTML Helper в «если» заявление, так что будет только если пользователь имел разрешение. Я второй угадала себя, когда увидела фронт конец становится очень раздутым со всеми эти заявления в моей голове, и думал, что может быть лучший способ сделай это.

Поместите if в вашего Html Helper и передайте функции помощника, какие данные вам нужны для выполнения условной проверки.

Вид:

<body>
  <p>text</p>
  <%: Html.PermissionControlledFieldOne(someUserData, otherData) %>

Помощник:

public HtmlString PermissionControlledFieldOne(....) {
  if (performSecurityCheck(someUserData, otherData)) {
    // .. render partial or build html or whatever you need
  }
2 голосов
/ 12 января 2011

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

Это должно означать, что вы можете создать один блок логики в вашем частичном представлении, с решением, являющимся некоторыми базовыми if или переключателямии разметка для отображения его более четким и управляемым.

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

<%Html.RenderPartial("Widgets/NavigationUserControl"); %>

Это будет содержать разметку и логику для навигации пользователя.В этом частичном представлении вы бы унаследовали ваш объект прав доступа:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WebApp.Web.Models.Permissions>" %>

А затем вы можете выполнить более базовую логику в разметке или воспользоваться помощником html для выполнения хрюка.работать и возвращать некоторые перечисления / свойства для более простого кода, чтобы принять решение.Например;

<%
if (Model.User.IsAdmin)
{
%>
...html...
<%
}
else
{
%>
...html...
<%
}
%>
...