R 当用户已经在使用闪亮的应用程序时,如何阻止或限制访问
我有一个使用Ace编辑器的闪亮应用程序。现在,我想让它在第一个用户使用此编辑器时,其他用户无法编辑文档,而只能查看文档 如何实现这一点 代码是:R 当用户已经在使用闪亮的应用程序时,如何阻止或限制访问,r,shiny,privileges,ace-editor,R,Shiny,Privileges,Ace Editor,我有一个使用Ace编辑器的闪亮应用程序。现在,我想让它在第一个用户使用此编辑器时,其他用户无法编辑文档,而只能查看文档 如何实现这一点 代码是: library(shiny) library(shinyAce) library(stringi) ui <- fluidPage( br(), uiOutput("aceEditor1"), downloadButton('save1', 'Save editor content') ) server <- functio
library(shiny)
library(shinyAce)
library(stringi)
ui <- fluidPage(
br(),
uiOutput("aceEditor1"),
downloadButton('save1', 'Save editor content')
)
server <- function(input, output, session)
{
output$aceEditor1 <- renderUI(
{
aceEditor(outputId = "ace1",
value = paste(stri_rand_lipsum(3), collapse="\n\n"),
mode = "r",
height = "500px",
fontSize = 17,
theme = "chrome",
wordWrap = TRUE)
})
output$save1 <- downloadHandler (
filename = function()
{
"result.txt"
},
content = function(file)
{
write.table(x = input$ace1, file = file, sep = "", row.names = FALSE, col.names = FALSE, quote = FALSE)
}
)
}
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(新亚斯)
图书馆(stringi)
ui您可以通过引入键来实现这一点。本质上,我们创建了一个对所有会话都可见的全局键变量。当会话启动时,它接受密钥并将全局变量设置为不可用
当新会话连接并尝试获取密钥时,但该密钥不可用
在服务器功能中,我们可以在执行“关键部分”代码之前进行检查
这基本上是半音旗工作原理的基础
最后,当第一个会话的会话结束时,它返回全局变量的键
我们还可以更进一步,使用invalidaterater()
定期检查密钥是否可用
要运行下面的虚拟示例,请首先运行以下命令:
write_csv(mtcars,"~/Desktop/data.csv")
应用程序如下所示:
library(shiny)
key_available <- TRUE
ui <- fluidPage(
br(),
textInput(inputId = "text_input","Text Input"),
actionButton(inputId = "add_col","Add Column"),
dataTableOutput("table_output"),
downloadButton('save1', 'Save editor content')
)
server <- function(input, output, session){
onSessionEnded(function() key_available <<- TRUE)
# Session starts, Read data in
have_key <- FALSE
observe({
invalidateLater(1000)
if(key_available){
key_available <<- FALSE
have_key <<- TRUE
}
})
data_reactive <- eventReactive(c(input$add_col),{
data <- read_csv("~/Desktop/data.csv")
if(have_key){
data[[input$text_input]] <- NA
write_csv(data,"~/Desktop/data.csv")
}
return(data)
})
output$table_output <- renderDataTable({
req(data_reactive())
data_reactive()
})
}
shinyApp(ui = ui, server = server)
库(闪亮)
键可用您可以通过引入键来实现这一点。本质上,我们创建了一个对所有会话都可见的全局键变量。当会话启动时,它接受密钥并将全局变量设置为不可用
当新会话连接并尝试获取密钥时,但该密钥不可用
在服务器功能中,我们可以在执行“关键部分”代码之前进行检查
这基本上是半音旗工作原理的基础
最后,当第一个会话的会话结束时,它返回全局变量的键
我们还可以更进一步,使用invalidaterater()
定期检查密钥是否可用
要运行下面的虚拟示例,请首先运行以下命令:
write_csv(mtcars,"~/Desktop/data.csv")
应用程序如下所示:
library(shiny)
key_available <- TRUE
ui <- fluidPage(
br(),
textInput(inputId = "text_input","Text Input"),
actionButton(inputId = "add_col","Add Column"),
dataTableOutput("table_output"),
downloadButton('save1', 'Save editor content')
)
server <- function(input, output, session){
onSessionEnded(function() key_available <<- TRUE)
# Session starts, Read data in
have_key <- FALSE
observe({
invalidateLater(1000)
if(key_available){
key_available <<- FALSE
have_key <<- TRUE
}
})
data_reactive <- eventReactive(c(input$add_col),{
data <- read_csv("~/Desktop/data.csv")
if(have_key){
data[[input$text_input]] <- NA
write_csv(data,"~/Desktop/data.csv")
}
return(data)
})
output$table_output <- renderDataTable({
req(data_reactive())
data_reactive()
})
}
shinyApp(ui = ui, server = server)
库(闪亮)
key_可用也许您可以定义一个全局变量(在服务器
函数之外),当有人进入/退出编辑器时,该变量会更改T/F(我不熟悉该小部件的细节)。然后在进入编辑器之前检查变量,如果其他人没有退出,则不允许使用该变量。请参阅。Ace编辑器的使用就是一个可以在线编辑的示例。但重要的是,当有人在编辑器中编辑文档时,其他用户不能同时干预并开始编辑该文档。实际上,代码不是一个很好的例子,要编辑的文档应该是存储在服务器上某处的文档。也许您可以定义一个全局变量(在服务器
函数之外),当有人进入/退出编辑器时更改T/F(我不熟悉该小部件的细节)。然后在进入编辑器之前检查变量,如果其他人没有退出,则不允许使用该变量。请参阅。Ace编辑器的使用就是一个可以在线编辑的示例。但重要的是,当有人在编辑器中编辑文档时,其他用户不能同时干预并开始编辑该文档。实际上,代码不是一个很好的例子,要编辑的文档应该是存储在服务器上某个位置的文档。这是使用的罕见次数之一这是使用