airflow dag权限管理

2019-03-05  本文已影响0人  修行的修行

想通过设置账号username,来控制某个账户只能看到对应owner的dag。

网上百度了很久都没有找到教程,于是找资料开始查看源码。airflow界面是使用的

flask,所以只需要了解下flask的使用方法。

airflow界面

在源码下找到了,airflow/www/views.py文件的类HomeView,已经实现了通过判定账户

是否为superuser和参数FILTER_BY_OWNER,来控制是否过滤掉非owner的dag。接下

来找到airflow/models.py文件,发现在User类下,并没有一个存储账户是否为超级用户

的字段。那我们添加一个superuser字段为bool类型,修改is_superuser函数。然后我们

再去airflow对应数据库的表users,添加superuser字段。

最后,airflow/contrib/auth/backends/password_auth.py 是控制view.py

里current_user.is_superuser()值的文件,我们找到is_superuser函数并修改。

操作流程1.airflow/www/views.py文件   87行 ,修改 FILTER_BY_OWNER = True

airflow/www/views.py

                   2.airflow/models.py文件, User类里添加superuser = Column(Boolean),

                      修改is_superuser函数为return self.superuser

airflow/models.py

                   3.去airflow对应数据库的表user里添加布尔类型字段 superuser

                   4.airflow/contrib/auth/backends/password_auth.py文件,

                      修改is_superuser函数为return    self.user.superuser

                   5.创建airflow用户,python执行以下代码

import airflow

from airflow import models, settings

from airflow.contrib.auth.backends.password_auth import PasswordUser

user = PasswordUser(models.User())

user.username = ''

user.email = ''

user.password = ''

user.superuser = True or False

session = settings.Session()

session.add(user)

session.commit()

session.close()

exit()

最后,用创建的账号登陆,超级用户可以查看所有dag,非超级用户只能查看

owner = username 的dag 啦。

不明白为什么airflow做了显示owner dag的功能,却没有做相应的配置。。。.

上一篇 下一篇

猜你喜欢

热点阅读