首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >闪亮:有条件构建用户界面

闪亮:有条件构建用户界面
EN

Stack Overflow用户
提问于 2020-04-29 08:09:38
回答 1查看 208关注 0票数 1

我正在构建一个闪亮的仪表板来显示大量的数据。人们通过位于前面的单独的登录页面(不闪亮)访问仪表板,此时生成一个JWT并放入cookie中。我成功地读取了闪亮的cookie,并解析了数据,将令牌保存在一个名为userPermissions的变量中。但是,现在,我想根据用户权限在仪表板上显示/隐藏选项卡。

例如:我有经理和助理的数据。我想用userPermissions == 'manager'向任何用户显示管理器数据,向任何使用userPermissions == assistant的用户显示辅助数据。

我认为最好的方法是使用conditionalPanel() --下面是一个(简化的)可复制的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(shiny)

# UI file 
ui <- fluidPage(

    # JS to read cookie -- simplified to just return value!
    tags$head(tags$script(
      HTML('
            Shiny.addCustomMessageHandler("goReadTheCookie", function (message) {
              Shiny.onInputChange("cookie", "manager");
            })
           ')
    )

    # Title 
    ,titlePanel('Test')

    # Navbar
    ,navbarPage(
      id="navbar"
      ,conditionalPanel(condition = "userPermissions() == 'manager'",
                        mainPanel(textOutput('Manager data')))
      ,conditionalPanel(condition = "userPermissions() == 'assistant'",
                        mainPanel(textOutput('Assistant data')))
    )

)) 


# Server file 
server <- shinyServer(function(input, output,session){

    ## Grab permissions from Cookie
    # Prepare output
    userPermissions <- reactiveVal("")

    # Tell JS to return cookie
    session$sendCustomMessage(type="goReadTheCookie", message=list(name="cookie_name"))

    # Listen for cookie
    observeEvent(input$cookie,{   
          ## -- Bunch of code omitted for sake of brevity -- ##
          userPermissions("manager")
    })

})

# Run app
shinyApp(ui=ui, server=server)

这段代码的问题是,在浏览器控制台中,我得到了错误Can't find variable: userPermissions

我想,在JS抓取和返回cookie之前,整个ui都会被执行。解决这个问题最好的办法是什么?

或者,也许我走错路了。显然,我需要验证cookie服务器端(即R中的cookie服务器端),以避免泄露秘密;最好是这一检查,隐藏/显示是在闪亮的应用程序一开始就完成的(会话期间userPermissions不会更改)。也许有一个不同的(&更好的)解决方案来达到这一点?

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2020-07-10 09:16:10

最后,我发现appendTab函数做的正是我想要的。但是,这需要在server.R中运行,在函数中查找cookie (否则userPermissions实际上不存在)。我可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
appendTab("navbar"  # the id of the navigation bar created in ui.R
          ,tabPanel("tab name"
                    ,mainPanel(...))
)

tabPanel(...)可能是你通常在ui.R里放的任何东西。

这里的另一个好处是隐藏的选项卡在HTML源代码中也不可用,因为它们从未从服务器传递到客户端!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61506372

复制
相关文章
JSON 在JavaScript 中的使用。
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
愷龍
2022/10/06
10K0
JavaScript中this指向问题,暴力理解终极方法
前言:前端面试题总有问this是谁?对于java程序员来说,this很好理解,就是当前对象本身。对于js来说,this就是传说中的当前运行环境,其实理论知识一大把,但是很多程序员看到有些写法还是会懵逼,比如dom.onclick事件里调用事件里自己的方法,为啥指向的是window对象?
王念博客
2019/07/24
4130
4种在JavaScript中交换变量的方法
许多算法需要交换2个变量。在编码面试中,可能会问您“如何在没有临时变量的情况下交换2个变量?”。我很高兴知道执行变量交换的多种方法。在本文中,您将了解大约4种交换方式(2种使用额外的内存,而2种不使用额外的内存)。
王小婷
2020/10/28
3.1K0
【DB笔试面试736】在Oracle中,RAC数据库在备份恢复时有哪些步骤?
 RAC数据库的备份和恢复与单实例的数据库的备份和恢复基本上没有区别,其恢复过程基本上就是先恢复spfile,再还原控制文件,最后做数据库文件的RESTORE和RECOVER。需要注意的是,在RAC中,归档文件需要放在共享存储上,需要让集群的所有节点都可以访问的到。
AiDBA宝典
2020/01/20
5970
[译] 在 JavaScript 中通过 queueMicrotask() 使用微任务
原文:https://developer.mozilla.org/en-US/docs/Web/API/HTMLDOMAPI/Microtask_guide
江米小枣
2020/06/15
3.2K0
【DB笔试面试661】在Oracle中,在新建或重建索引时有哪些锁?
不带ONLINE的新建或重建索引的SQL语句获取的是4级TM锁,它会阻塞任何DML操作。
AiDBA宝典
2019/10/18
6850
【DB笔试面试661】在Oracle中,在新建或重建索引时有哪些锁?
JavaScript中splice方法的使用「建议收藏」
在JavaScript中,arrObject.splice()方法是处理数组的利器,利用它可以实现在指定位置删除、替换、插入指定数量的元素。 其语法为: arrayObject.splice(index,howmany,item1,…,itemX) 含义为从index开始,删除howmanry个元素,并在原地插入item1, …, itemN,最后返回被删除的数组。
全栈程序员站长
2022/10/05
1.8K0
在 JavaScript 中替换所有指定字符 3 种方法
在 JS 没有提供一种简便的方法来替换所有指定字符。 在 Java 中有一个 replaceAll() ,replaceAll(String regex, String replacement))方法使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串。
前端小智@大迁世界
2020/06/28
30.7K0
外贸在使用领英时有必要用领英精灵吗?
首先说一下结论,结论就是:有必要,非常有必要,为什么这么说呢?下面站在领英使用者的角度从安全、效率、投入产出比等角度详细阐述。
用户10405067
2023/03/08
6080
外贸在使用领英时有必要用领英精灵吗?
【DB笔试面试736】在Oracle中,RAC数据库在备份恢复时有哪些步骤?
RAC数据库的备份和恢复与单实例的数据库的备份和恢复基本上没有区别,其恢复过程基本上就是先恢复spfile,再还原控制文件,最后做数据库文件的RESTORE和RECOVER。需要注意的是,在RAC中,归档文件需要放在共享存储上,需要让集群的所有节点都可以访问的到。
AiDBA宝典
2020/02/24
5660
盘点JavaScript中Eval函数的使用方法
eval 内的代码在当前词法环境(lexical environment)中执行,因此它能访问外部变量:
前端进阶者
2021/07/22
1.7K0
【DB笔试面试731】在Oracle中,RAC在修改IP地址时有哪些注意事项?
1.如果底层网络配置已经更改,但是oifcfg尚未执行同样的变更,则重启oracle集群会导致crsd进程不能启动。
AiDBA宝典
2020/01/20
6850
在 JavaScript 中,对象是拥有属性和方法的数据
JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。 在 JavaScript 中,对象是拥有属性和方法的数据。
用户1503405
2021/10/08
3.7K0
MAX_FANOUT在布局布线时有效吗?
谈到降低高扇出网线的方法,我们会想起综合属性MAX_FANOUT。它可以在代码中使用,也可以写在XDC中。在XDC中的格式如下所示(点击这里复习:Vivado综合属性:MAX_FANOUT)。
Lauren的FPGA
2019/10/31
1.9K0
在 JavaScript 中轻松处理 this [每日前端夜话0xD1]
我喜欢 JavaScript 中能够更改函数执行上下文(也称为 this)的特性。
疯狂的技术宅
2019/10/17
2.4K0
JavaScript中的this指向问题
在JavaScript中,关键字 this 是一个特殊的对象,它在函数被调用时自动创建。通常用来指向当前执行的函数所属的对象。this 的值在函数的每次调用时可能会发生变化,具体取决于函数是如何被调用的。
九仞山
2023/10/14
2650
如何使用LinkFinder在JavaScript文件中查找网络节点
LinkFinder是一款功能强大的Python脚本,在该工具的帮助下,广大研究人员可以轻松在JavaScript文件中发现和扫描网络节点及其相关参数。这样一来,渗透测试人员和漏洞猎人将能够快速在测试的目标网站伤收集新的隐藏节点了。
FB客服
2023/08/08
4640
如何使用LinkFinder在JavaScript文件中查找网络节点
JavaScript中的this指向问题
this一般指向的是调用它的对象,比如调用它的上下文是window对象,那就是指向window对象,如果调用它的上下文是某对象就是指向某对象……
全栈开发Dream
2021/05/12
1.1K0
JavaScript中的this指向问题
windows窗体线程异常_指针在声明和使用时有何不同
大家好,又见面了,我是你们的朋友全栈君。 在多线程设计中,许多人为了省事,会将对话框类或其它类的指针传给工作线程,而在工作线程中调用该类的成员函数或成员变量等等。 但是在Debug版本时,在某些情况下,特别是在工作线程中调用pWnd->UpdateData(FALSE)时,会出现错误。 这个错误的原因网上有许多地方讲到了,但是,令人失望的是,讲得好的没几篇,都是非要讲什么线程模块状态什么的,让人看得云里雾里(不过,说实话,也就是从这些文章中才知道是怎么回事的)。
全栈程序员站长
2022/10/04
5220
throws子句在继承当中overrride时有什么规则?
马克-to-win:当子类方法override父类方法时,throws子句不能引进新的checked异常。换句话说:子类override方法的throws子句checked异常不能比父类多。马克-to-win:上面一条是死语法规定,这种规定,实际上都是源于checked异常这种最初的设计。
马克java社区
2021/04/07
3160
throws子句在继承当中overrride时有什么规则?

相似问题

连接到网络的所有设备的列表

47

如何使用Bonjour获取网络中所有设备的列表

11

使用android NSD发现网络中的所有服务

14

如何在objective-C中获取连接到同一wifi网络的设备列表?

13

获取同一网络中连接的所有设备的列表

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文