Подмножество кадра данных, используя блестящий метод аутентификации пользователя - PullRequest
0 голосов
/ 10 января 2019

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

# dataframe that holds usernames, passwords and other user data
user_base <- data.frame(
  user = c("user1", "user2","user1"),
  password = c("pass1", "pass2","pass1"), 
  permissions = c("admin", "standard","admin"),
  name = c("User One", "User Two","User One"),
  stringsAsFactors = FALSE)

С этого кадра данных пользователь использует user для имени пользователя и password для пароля для входа в приложение. Как вы увидите, я могу войти в приложение и увидеть таблицу только с учетными данными user2, поскольку user1 существует в 2 строках моего фрейма данных. Если я пропущу 3-й ряд, это сработает. Моя цель - установить исходный фрейм данных user_base на основе имени пользователя и пароля, которые я буду использовать, но теперь я вижу, что если у меня более одной строки с одним и тем же именем пользователя, это не сработает. Дополнительным вопросом является возможность пропустить пароль и разрешить пользователю войти в систему, используя только имя пользователя.

library(shiny)
library(shinyauthr)
library(shinyjs)

# dataframe that holds usernames, passwords and other user data
user_base <- data.frame(
  user = c("user1", "user2","user1"),
  password = c("pass1", "pass2","pass1"), 
  permissions = c("admin", "standard","admin"),
  name = c("User One", "User Two","User One"),
  stringsAsFactors = FALSE)

ui <- fluidPage(
  # must turn shinyjs on
  shinyjs::useShinyjs(),
  # add logout button UI 
  div(class = "pull-right", shinyauthr::logoutUI(id = "logout")),
  # add login panel UI function
  shinyauthr::loginUI(id = "login"),
  # setup table output to show user info after login
  tableOutput("user_table")
)

server <- function(input, output, session) {

  # call the logout module with reactive trigger to hide/show
  logout_init <- callModule(shinyauthr::logout, 
                            id = "logout", 
                            active = reactive(credentials()$user_auth))

  # call login module supplying data frame, user and password cols
  # and reactive trigger
  credentials <- callModule(shinyauthr::login, 
                            id = "login", 
                            data = user_base,
                            user_col = user,
                            pwd_col = password,
                            log_out = reactive(logout_init()))

  # pulls out the user information returned from login module
  user_data <- reactive({credentials()$info})

  output$user_table <- renderTable({
    # use req to only render results when credentials()$user_auth is TRUE
    req(credentials()$user_auth)
    user_data()
  })
}

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