1. 修改配置文件
修改superset中的config.py配置文件,将PUBLIC_ROLE_LIKE_GAMMA改为True。
注释意思:
授予公共角色与GAMMA角色相同的权限集。
如果想让匿名用户查看,可以设置这里,在仪表盘对特定数据集的授权显示,也在这里设置。
image
2. 去掉X-Frame-Options限制
image 避免iframe跨站访问问题。
3. 加入数据库权限这里加入所有数据库权限
image image其中:
can explore on Superset为导出图表
can explore json on Superset为导出图表json
all database access on all_database_access访问所有数据库权限,也可以设置单个
4. iframe嵌入
image5. iframe跨域集成时遇到难题
第一道墙
首先,认识一下 X-Frame-Options。
The X-Frame-Options
HTTP 响应头是用来给浏览器 指示允许一个页面 可否在 <frame>
, <iframe>
, <embed>
或者 <object>
中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 clickjacking 攻击。
X-Frame-Options 有三个可能的值:
X-Frame-Options: deny # 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
X-Frame-Options: sameorigin # 表示该页面可以在相同域名页面的 frame 中展示。
X-Frame-Options: allow-from https://www.baidu.com/ # 表示该页面可以在指定来源的 frame 中展示。
在0.27中保持这个配置项为空即可,在master中远远不够。
第二道墙
这么修改后可能还会遇到在打开iframe时出现错误
这里的原因可能是——开启public角色的访问权限后,真正放到iframe中还需要解决跨域问题,而老版本中对http_headers配置项的修改不起作用,只能直接对explore_json去除csrf保护。
添加配置文件中的👇
WTF_CSRF_EXEMPT_LIST = [
"superset.views.core.explore_json"
]
再次访问有效,所以在master版本中,主要是依靠对特定接口取消保护来达到目的。
第三道墙
如果使用nginx进行部署的话,还需要配置 nginx 发送 X-Frame-Options 响应头,把下面这行添加到 'http', 'server' 或者 'location' 的配置中:
add_header X-Frame-Options sameorigin always;
注意:
-
修改配置项http_headers为 {"X-Frame-Options": ""} 对授权无用,但对限制有用;
-
用户访问不在自己角色可能访问的数据,只是权限问题,可能报错:
网友评论