6

Superset权限使用场景

 2 years ago
source link: https://cloud.tencent.com/developer/article/1031496
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如前文所述,Superset初始化权限之后,创建5个角色,分别为Admin,Alpha,Gamma,sql_lab以及Public。Admin,Alpha和Gamma角色,分配了很多的菜单/视图权限,如果手工去修改,改错的可能性很大,加之Superset并没有说明每一项权限的完整文档,所以不建议去修改这些角色的定义。灵活使用预置的角色,可以快速满足业务上安全控制需求。

本文先介绍这几个角色,然后结合实际的安全访问控制的场景,看在Superset中怎样实现。

角色权限介绍

Admin:

拥有所有权限。

Alpha:

能访问所有数据源,增加或者更改数据源,但不能给更改其他用户权限。

Gamma:

必须结合其他能访问数据源的角色才能访问数据。这个角色所能访问的切片和看板,也是基于能访问数据源所创建的切片和看板。

sql_lab:

能访问SQL Lab菜单。

Public:

默认没有任何权限。

下面列举几种业务需求,看怎样应用这些角色来满足。

匿名访问

所有用户都能访问某一个看板,需要进行如下设置:

(1) 更改config.py文件,设置如下部分,PUBLIC_ROLE_LIKE_GAMMA = True

(2) 然后需要运行superset init命令,这个命令会给“Public”角色设置与“Gamma”一样的权限。官方文档并没有说明必须要运行这个命令。如果你是在安装过程中已经运行了“superset init”命令,你再设置“PUBLIC_ROLE_LIKE_GAMMA = True”,这个设置将不起作用。但你可以手动给“Public”角色分配与“Gamma”一样的权限(巨大的工程)。或者你熟悉superset的表结构,也可以通过sql语句来批量分配。

(3) 将匿名用户所需要访问的数据库和数据源分配给“Public”角色。例如,基于main数据库的ab_permission_view创建了看板,如果匿名用户需要查看这个看板,那将如下权限分配给“Public”。

图一:将需要访问的数据库

和数据源添加给Public角色

完成上述步骤之后,匿名用户可以看到菜单(请参考图二)。

图二:Gamma的权限能访问的菜单

能访问的菜单较多,这是因为“Gamma”所拥有的权限比较多,“Public”所拷贝的菜单也会很多。如果只想让匿名查看具体的一个看板(但不能查看看板列表,切片列表,数据源列表等等),可以简单的将如下权限分配给“Public”角色,请参考图三。

1620

图三:查看某一个看板所需要的最小权限

接下来验证看是否匿名访问这个看板,管理员用户访问看板列表,复制(参考图四)看板的链接地址。

1620

图四:复制看板的链接地址

用隐私模式打开浏览器,粘贴上一步拷贝的地址,不用登录,匿名用户就可以看到对应看板。如果想访问其他的地址,会转到登录窗口,需要输入用户名和密码。

1620

图五:匿名用户能访问指定的看板

角色权限介绍

实际业务中,不同的职能部门访问的数据不一样,例如财务部需要访问成本,应收,应付等数据,供应链需要访问库存数量,发货数据等,怎样简洁的设置,快速满足这种业务需求?

如前文所述,“Gamma”拥有大部分基础的权限,但是必须结合其他能访问数据源的角色才能访问数据。所以,可以给用户分配“Gamma”角色和针对部门分别创建的数据源角色来进行控制。

例如,针对财务用户,创建角色“Finance”,将成本,应收,应付的数据表权限赋予这个角色,财务用户就分配“Gamma”和“Finance”。

针对供应链用户,创建角色“SCM”,将库存和发货数据表权限赋予这个角色,供应链用户就分配“Gamma”和“SCM”。

如果是公司的霸道总裁,需要看所有的看板,就可以给霸道总裁赋予“Gamma”和“Finance”,“SCM”角色。

说明图请参考图六。

1620

图六:Gamma结合创建角色实现

数据源的访问控制

字段级别控制

实际业务还有需要在字段级别控制访问的需求,例如HR部门中,HR员工可以看员工的基本信息,但是薪酬部的同事需要查看员工的薪酬数据。所以需要控制薪酬数据字段的访问。

一种直观的想法,根据上一节“按职能部门访问不同数据”的方法,建立两个角色,一个角色可以访问表只包含员工基本信息,另一个角色可以访问的数据表还包含薪酬数据。这样也是可以满足需求。

其实Superset可以在字段粒度上进行控制,但在当前版本(0.22.1)上,有用户提交issue,尚未解决。先可以了解步骤,等待问题解决了,将来在新的版本中可以设置。对应的步骤如下:

(1) 编辑表的对应的指标列,将“Is Restricted”选中,请参考图七

1620

图七:设置指标列的访问控制

(2) 系统会针指标列(例子中指标列为“rev”)创建类似“metric access on [main].[ab_permission_view].[rev](id:1)”权限,然后将这个权限分配给需要访问这一列的角色。

这样可以实现字段基本的控制。Github关于这个问题的Issue可以参考如下链接:

https://github.com/apache/incubator-superset/issues/3938

https://github.com/apache/incubator-superset/issues/2326

本文列举了权限使用几种场景,以及在Superset中怎样通过设置来满足权限的需求。关于安全的更深入的应用,例如怎样和其他系统集成,等待后续整(li)理(jie)之后再分享。写完这篇,2018年的大门就要悄悄打开了,我很向往。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK