Я работаю с функцией входа на блестящий веб-сайт, где разные пользователи имеют доступ к разным вещам (базовый c по сравнению с расширенным). Я пытаюсь создать новую вкладку, точно такую же, как «Персональная страница», к которой должны иметь доступ только опытные пользователи.
Разделение между продвинутыми и базовыми c пользователями, похоже, работает нормально, однако я изо всех сил пытаюсь создать новую видимую вкладку при этом. Он создает «дополнительную» вкладку без имени (см. Прикрепленное изображение), где я хочу, чтобы вкладка выглядела как «Персональная страница».
см. Изображение здесь
Мой код:
ui <- navbarPage(title = "TBI Rehabilitation",
theme = "style/style.css",
fluid = FALSE,
collapsible = TRUE,
inverse = FALSE,
div(class = "login",
uiOutput("uiLogin"),
textOutput("pass"),
tags$head(tags$style("#pass{color: red;"))),
div(class = "login",
uiOutput("permission")),
div(class = "login",
uiOutput("body")),
fluidRow(
column(8,
div(class = "logininfo",
uiOutput("userPanel")
))),
tabPanel("Personal page",icon=icon("spa"),
h1("This works fine here.
But needs to be moved to Login function
in order to make the tab available only
for the advanced user"))
)
server <- function(input, output, session) {
USER <- reactiveValues(Logged = FALSE , session = session$user)
source("www/Login.R", local = TRUE)
}
shinyApp(ui = ui, server = server)
и код для моей функции входа в систему:
PASSWORD <- data.frame(
user = c("patient","caregiver"),
pw = c("0000","1234"),
permission = c("basic", "advanced"),
stringsAsFactors = F
)
output$uiLogin <- renderUI({
if (USER$Logged == FALSE) {
wellPanel(
textInput("userName", "Username:"),
passwordInput("passwd", "Password:"),
br(),
actionButton("Login", "Login")
)
}
})
output$body <- renderUI ({
if (USER$Logged == TRUE) {
if (PASSWORD[,"permission"][which(PASSWORD$user==input$userName)]=="advanced"){
tabItems(
tabItem(
title = "Test",class = "active",
h2("test Test ")),
p(strong("Test - Advanced access")))
}
else {
tabItems(
tabPanel(
title = "Test - Basic access "))
}
}
})
output$permission <- renderUI ({
if (USER$Logged == TRUE) {
if (PASSWORD[,"permission"][which(PASSWORD$user==input$userName)]=="advanced"){
tabItems(
tabPanel("Test",tabName = "Advanced access test Page", icon=icon("user"))
)
}
else {
tabItems(
tabPanel(
title = "Basic access test page"))
}
}
})
output$pass <- renderText({
if (USER$Logged == FALSE) {
USER$pass
}
})
# Login info during session ----
output$userPanel <- renderUI({
if (USER$Logged == TRUE) {
fluidRow(
column(2,
"User: ", USER$name
),
column(1, actionLink("logout", "Logout"))
)
}
})
# control login
observeEvent(input$Login , {
Username <- isolate(input$userName)
Password <- isolate(input$passwd)
Id.username <- which(PASSWORD$user == Username)
Id.password <- which(PASSWORD$pw == Password)
if (length(Id.username) > 0 & length(Id.password) > 0) {
if (Id.username == Id.password) {
USER$Logged <- TRUE
USER$name <- Username
}
} else {
USER$pass <- "User name or password failed!"
}
})
# control logout
observeEvent(input$logout , {
USER$Logged <- FALSE
USER$pass <- ""
})
Я пробовал много разных вариантов (с разными ошибками), но на данный момент получаю следующую ошибку: Ожидается, что у тега будет класс tab-pane. Я получаю ту же ошибку, если меняю class = 'login' на class = 'tab-pane' для uiOutput («разрешение») и uiOutput («body»).
Есть ли простой способ отображать различные вкладки (в заголовке, а не на боковой панели) в зависимости от разрешения пользователя?