2015-11-19 17 views
7

Desidero avere pagine diverse nella mia bacheca lucida. Prima di tutto ho creato una pagina di accesso per fornire l'autenticazione all'utente e all'amministratore. Successivamente, se l'amministratore accede al sistema, desidera vedere alcune opzioni a cui l'utente non può accedere. Domanda: quando accedo come utente o come amministratore posso vedere la pagina principale di ui.r in background come posso risolvere questo problema per vedere solo admin.R o user.R? Quando l'utente accede al pannello di controllo mostra e quando l'amministratore accede al dashboard e al widget. Così ho deciso di creare 4 pagine in R come segue: ui.RDiverse pagine nell'app lucida

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(
    ) 

)) 

risposta

11

Se ti ho undertand destra è possibile creare liste diverse in voi file aggiuntivi

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"))) 
)) 

Poi cambiano un po 'si interfaccia utente e Server

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 
     }) 
     } 
    }) 
}) 
+0

Grazie mille. – user

Problemi correlati