出身背景
我正在尝试开发一个应用程序,它有一个登录屏幕,并根据用户的权限显示不同的菜单。
Read + Write
用户应具有与
Read
用户加上一些附加权限。
我现在正在努力创建这个动态菜单。我读过
this document on dynamic UIs
conditionalPanel
在下面的代码中,您可以看到有很多重复。最糟糕的是,我必须为
tabs
即使他们在不同的(互斥)面板中(
a1
a2
)但它们的作用是完全相同的。
条件面板
sidebarMenu
tabItems
但是我得到了一个错误,因为
条件面板
预期结果
最后,我希望代码的重复最少。也就是说,我想为
Do A
Do B
一旦
做一个
对于两个用户。
我有哪些选择?我必须回到动态渲染吗(
renderUI
renderMenu
)或者有没有一种方法可以让我达到想要的行为/
条件面板
只有
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
selectInput("userrights", label = "User Rights:",
choices = c("Read + Write", "Read")),
conditionalPanel("input.userrights == 'Read'",
sidebarMenu(
menuItem("Do A", tabName = "a1")
)
),
conditionalPanel("input.userrights == 'Read + Write'",
sidebarMenu(
## unnecessary duplication + I need yet another tab 'a2'
menuItem("Do A", tabName = "a2"),
menuItem("Do B", tabName = "b2")
)
)
),
dashboardBody(
conditionalPanel("input.userrights == 'Read'",
tabItems(
tabItem("a1", h1("A was done"))
)
),
conditionalPanel("input.userrights == 'Read + Write'",
tabItems(
tabItem("a2", h1("A was done")),
tabItem("b2", h1("B was done"))
)
)
)
)
server <- function(input, output) {}
runApp(shinyApp(ui, server))
代码段:不工作,但至少没有重复
sidebarMenu(
menuItem("Do A", tabName = "a")
conditionalPanel("input.userrights == 'Read + Write'",
menuItem("Do B", tabName = "b")
)
)