Реактивная фильтрация на основе логина пользователя - Shinyauthr - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть приложение QA Shiny Dashboard, которое имеет основной набор данных, который должен фильтровать строки, используемые в последующих таблицах / картах, в соответствии с данными для входа в систему пользователя.

Например: если пользователь входит в систему с определенным именем пользователя (location@email.com) затем реактивная функция выбирает строки, содержащие это имя пользователя, и передает их блестящему приложению для рендеринга.

Пример базового c предпосылки:

username <- "location@email.com"

new_dataset <- filter(dataset, column %like% username

output$table <- renderTable ({
  new_dataset
)}

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

users <- data.frame(user= c("user1", "user2", "user3"),
                         password = c("pass1", "pass2", "pass3"),
                         stringsAsFactors = FALSE)

ui <- dashboardPage(

  dashboardHeader(
    title = "QA App",

    tags$li(class = "dropdown", style = "padding: 8px;", shinyauthr::logoutUI("logout"))
  ),

  dashboardSidebar(
    collapsed = TRUE, sidebarMenuOutput("sidebar")
  ),

  dashboardBody(

    shinyjs::useShinyjs(),

    # shinyauthr login ui module here
    shinyauthr::loginUI("login"),

    tabItems(
      tabItem("tab", uiOutput("tab1_ui"))
    )
  )
)

server <- function(input, output) {

credentials <- callModule(shinyauthr::login, "login", 
                          data = users,
                          user_col = user,
                          pwd_col = password,
                          sodium_hashed = FALSE,
                          log_out = reactive(logout_init()))


# logout status managed by shinyauthr module and stored here
logout_init <- callModule(shinyauthr::logout, "logout", reactive(credentials()$user_auth))

output$sidebar <- renderMenu({
  req(credentials()$user_auth)
  sidebarMenu(

    menuItem("Tab", tabName = "tab", icon = icon("arrows-alt-v"))

  )
})

output$tab1_ui <- renderUI({

  req(credentials()$user_auth)
  fluidPage(

    mainPanel(
             tableOutput("table"),
      )
     )
  })
}

shinyApp(ui = ui, server = server)

I w * sh, чтобы создать реактивную функцию, которая будет отображать этот новый_данный набор данных и передавать его на выход таблицы в пользовательском интерфейсе. Вопрос в том, как получить доступ к учетным данным пользователя в виде строк символов для использования при фильтрации?

1 Ответ

0 голосов
/ 18 февраля 2020

Как часто случается в этих случаях, много споров в конце концов привело к ответу, но я опубликую свое решение здесь на случай, если кто-нибудь столкнется с подобной проблемой.

R2Evans был прав в том, что его можно вызвать с учетными данными () $ info. Проблема пыталась использовать eventReactive, а не просто реагирующий.

Реактивные данные пользователя собираются через:

credentials <- callModule(shinyauthr::login, "login", 
                          data = user_base,
                          user_col = user,
                          pwd_col = password,
                          sodium_hashed = FALSE,
                          log_out = reactive(logout_init()))

user_info <- reactive({credentials()$info})

filteredData <- reactive({
  filter(table, column %like% as.character(user_info()$user))
})

output$table <- renderTable(filteredData())
...