Deadbolt: показывать части шаблона только для текущего вошедшего пользователя

В моей системе у каждого пользователя есть собственный общедоступный профиль. Я хочу показать кнопку «Изменить» только на странице профиля текущего зарегистрированного пользователя. Теперь я делаю это, используя этот код

  @subjectPresent() {
    @if(userProfile == userLogged){
      <button>Edit</button>
    }
  }

где userProfile — пользователь-владелец текущей страницы, а userLogged — фактически зарегистрированный пользователь.

Учитывая, что мне придется делать эту проверку много раз, есть ли в Deadbolt или Scala лучший (более чистый) способ сделать это?


person Fred K    schedule 14.11.2013    source источник


Ответы (2)


Как предложил Дэвид, вы можете заключить это в свой собственный тег. Теги — это просто функции, и они выглядят как другие представления (на самом деле они являются другими представлениями).

Вы можете попробовать что-то вроде

@(userProfile: User, userLogged: User)(body: => Html)

@subjectPresent() {
  @if(userProfile == userLogged){
    @body
  }
}

и сохраните это в файле с именем foo.scala.html

Затем вы можете использовать это с

@foo(userProfile, userLogged) {
  <button>Edit</button>
}

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

person Steve Chaloner    schedule 19.11.2013

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

person David Weinberg    schedule 18.11.2013
comment
Привет Дэвид, это кажется хорошим моментом. Не могли бы вы опубликовать пример кода, чтобы лучше понять? Это было бы очень полезно. Спасибо - person Fred K; 18.11.2013