问题说明
superset中的chart和dashboard都可以提供短url在html页面进行直接访问,也可以在iframe中进行引用展示。
问题出现在当使用上述两种方式时页面会跳转至登录页面,提示你权限不够。
查了网上各种博客,官档,issue等等,说的都不是很明确,很多都是无效的答案,花了一上午终于解决了,必须记录下来。
解决思路
1、权限不够就需要赋予权限,找到需要赋权的对象
通过查看源代码可以发现这些访问都是通过public角色的;
2、角色权限
Admin:拥有所有权限;
Alpha:能访问所有数据源,增加或者更改数据源,但不能更改其他用户权限;
Gamma:必须结合其他能访问数据源的角色才能访问数据。这个角色所能访问的切片和看板,也是基于能访问数据源所创建的切片和看板;
sql_lab:能访问SQL Lab菜单;
Public:默认没有任何权限;
3、赋权
可以参照Gamma角色的权限一项项加入public中,但是实在这样太麻烦了,上百个不得加半天的;
找到superset后台代码中的config.py配置文件,其中有个配置"PUBLIC_ROLE_LIKE_GAMMA",将其改为True。
然后使用"python superset/bin/superset init" 初始化数据库角色权限,结束后可以看到Gamma的权限已经加入到public中了;
(tips:如果你的数据库不是初始化的,角色已经赋予了一些权限,不必担心会把这些设置清掉,init只会追加初始权限进角色,不会删除的。我也是中途进行的这项修改,已经帮你踩过坑了,所以放心大胆操作吧。)
不相信?看manager.py中set_role中的代码,L664,merge
role = self.add_role(role_name)
role_pvms = [p for p in pvms if pvm_check(p)]
role.permissions = role_pvms
sesh.merge(role)
sesh.commit()
现在还剩下一个操作需要,就是添加数据源访问权限,所以还需要加上下面这个权限:
all database access on all_database_access
这是访问所有数据库权限,你也可以根据需要单独指定数据源。
总结
上面废话多了点,如果懒的看就从这里开始吧
1、将config.py中的配置项 PUBLIC_ROLE_LIKE_GAMMA改成True
2、superset init 初始化
3、给public角色添加数据源权限