airflow dag权限管理
想通过设置账号username,来控制某个账户只能看到对应owner的dag。
网上百度了很久都没有找到教程,于是找资料开始查看源码。airflow界面是使用的
flask,所以只需要了解下flask的使用方法。

在源码下找到了,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

2.airflow/models.py文件, User类里添加superuser = Column(Boolean),
修改is_superuser函数为return self.superuser

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的功能,却没有做相应的配置。。。.