Various pages in the Shiny app

I want to have different pages in my shiny panel. First of all, I created a login page to give authentication to the user and administrator. After that, if the login administrator wants to see some parameters that the user cannot get to them. Question: when I log in as a user or administrator, I see the main ui.r page in the background, how can I fix this problem to see only admin.R or user.R? When the user logs into the dashboard, and when the administrator logs in, it is displayed on the panel and widgets. So I decided to create 4 pages in R as follows: ui.R

library(shiny) library(shinydashboard) shinyUI( dashboardPage( dashboardHeader(title = "Navigational Support System"), dashboardSidebar(), dashboardBody( box( uiOutput("page") ) ) ) ) 

server.R

 library(shiny) library(shinydashboard) source("user.R") source("admin.R") ############################################################################################################ #Login USER and ADMIN TO the System my_username <- c("test","admin") my_password <- c("test","123") get_role=function(user){ if(user=="test") { return("TEST") }else{ return("ADMIN") } } get_ui=function(role){ if(role=="TEST"){ return(list_field_user) }else{ return(list_field_admin) } } shinyServer(function(input, output,session) { USER <- reactiveValues(Logged = FALSE,role=NULL) ui1 <- function(){ tagList( div(id = "login", wellPanel(textInput("userName", "Username"), passwordInput("passwd", "Password"), br(),actionButton("Login", "Log in"))) #tags$style(type="text/css", '#login{ width:750px; float:left;}') )} ui2 <- function(){tagList(tabPanel("NSS",get_ui(USER$role)))} observe({ if (USER$Logged == FALSE) { if (!is.null(input$Login)) { if (input$Login > 0) { Username <- isolate(input$userName) Password <- isolate(input$passwd) Id.username <- which(my_username == Username) Id.password <- which(my_password == Password) if (length(Id.username) > 0 & length(Id.password) > 0) { if (Id.username == Id.password) { USER$Logged <- TRUE USER$role=get_role(Username) } } } } } }) observe({ if (USER$Logged == FALSE) { output$page <- renderUI({ div(class="outer",do.call(bootstrapPage,c("Please Login",ui1()))) }) } if (USER$Logged == TRUE) { output$page <- renderUI({ div(class="outer",do.call(navbarPage,c(inverse=TRUE,title = "Welcome Admin!",ui2()))) }) #print(ui) } }) ################################################################################################## }) 

admin.r

 list_field_admin = shinyUI( dashboardPage( dashboardHeader(title = "Decison Support System"), dashboardSidebar( sidebarMenu( menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")), menuItem("Widgets", tabName = "widgets", icon = icon("th")) ) ), dashboardBody( ) )) 

user.r

 list_field_user = shinyUI( dashboardPage( dashboardHeader(title = "Decison Support System"), dashboardSidebar( sidebarMenu( menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")) ) ), dashboardBody( ) )) 
+7
r shiny shinydashboard
source share
1 answer

If I take you on, you can create different lists in your additional files

1) admin.r

 admin_title="Decison Support System" admin_side=list(sidebarMenu( menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")), menuItem("Widgets", tabName = "widgets", icon = icon("th")) )) admin_main=list( tabItems( tabItem(tabName = "dashboard", list(h1("1234"),h2("234"))), tabItem(tabName = "widgets", list(fluidRow(column(6,numericInput("inputtest", "test", value = 0),column(6,actionButton(inputId ="test1",label ="go"))))) ) )) 

2) user.r

 test_title="Decison Support System" test_side=list(sidebarMenu( menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")))) test_main=list( tabItems( tabItem(tabName = "dashboard", list(h1("user"),h2("user"))) )) 

Then change the user interface and server a bit

UI:

 library(shiny) library(shinydashboard) shinyUI( dashboardPage( dashboardHeader( title=textOutput("title")), dashboardSidebar(uiOutput("side")), dashboardBody( uiOutput("page") ) ) ) 

server:

 library(shiny) library(shinydashboard) source("user.R") source("admin.R") my_username <- c("test","admin") my_password <- c("test","123") get_role=function(user){ if(user=="test") { return("TEST") }else{ return("ADMIN") } } get_ui=function(role){ itog=list() if(role=="TEST"){ itog$title=test_title itog$main=test_main itog$side=test_side return(itog) }else{ itog$title=admin_title itog$main=admin_main itog$side=admin_side return(itog) } } shinyServer(function(input, output,session) { USER <- reactiveValues(Logged = FALSE,role=NULL) ui1 <- function(){ tagList( div(id = "login", wellPanel(textInput("userName", "Username"), passwordInput("passwd", "Password"), br(),actionButton("Login", "Log in"))) ,tags$style(type="text/css", "#login {font-size:10px; text-align: left;position:absolute;top: 40%;left: 50%;margin-top: -10px;margin-left: -150px;}") )} observe({ if (USER$Logged == FALSE) { if (!is.null(input$Login)) { if (input$Login > 0) { Username <- isolate(input$userName) Password <- isolate(input$passwd) Id.username <- which(my_username == Username) Id.password <- which(my_password == Password) if (length(Id.username) > 0 & length(Id.password) > 0) { if (Id.username == Id.password) { USER$Logged <- TRUE USER$role=get_role(Username) } } } } } }) observe({ if (USER$Logged == FALSE) { output$page <- renderUI({ box( div(class="outer",do.call(bootstrapPage,c("",ui1())))) }) } if (USER$Logged == TRUE) { itog=get_ui(USER$role) output$title<- renderText({ itog$title }) output$side <- renderUI({ itog$side }) output$page <- renderUI({ itog$main }) } }) }) 
+11
source share

All Articles