6 根据机构代码显示不同数据
6.1修改viz.py 添加默认where条件
extras = {
'where':'comcode="5100000"',
'having': form_data.get('having', ''),
'having_druid': form_data.get('having_filters', []),
'time_grain_sqla': form_data.get('time_grain_sqla', ''),
'druid_time_origin': form_data.get('druid_time_origin', ''),
}
修改这个地方 就可以在dashboard加载时指定数据机构
6.2修改viz.py 引入取当前登陆用户的方法
from superset.jinja_context import current_username
然后就可以print(current_username()) 得到当前用户
那么我们就可以在这里添加一个判断来对用户做判断并为条件赋值
#print(current_username())
#print("==================================================")
current_user = current_username()
if current_user == "2222":
comcodelike = 'comcode like "51%"'
elif current_user == "11111":
comcodelike = 'comcode like "510%"'
else:
comcodelike = 'comcode like "511%"'
print(comcodelike)
extras = {
'where':comcodelike,
# 'where':'where comcode="510000"'.strp('\n'),
'having': form_data.get('having', ''),
'having_druid': form_data.get('having_filters', []),
'time_grain_sqla': form_data.get('time_grain_sqla', ''),
'druid_time_origin': form_data.get('druid_time_origin', ''),
}
print(extras)
6.3 将权限放到数据库中管理
a 在superset 的 ab_user表增加字段 comcode 并赋值
b 在flask_appbuilder/security/sqla/models.py 的class User(Model): 添加字段comcode ,做好数据库的绑定
c 然后在 superset/viz.py中 用g.user.comcode 就可以取到值了
6.4 最终viz.py效果
from flask import escape, request, g 这里添加 ,g 引入flask 的全局变量,用于取当前登录用户的信息
current_comcode = g.user.comcode #取当前登陆用户的机构
comcodelike = 'comcode like "' + current_comcode +'%"' #字符串连接 拼接where条件
extras = {
'where':comcodelike,
'having': form_data.get('having', ''),
'having_druid': form_data.get('having_filters', []),
'time_grain_sqla': form_data.get('time_grain_sqla', ''),
'druid_time_origin': form_data.get('druid_time_origin', ''),
}
6.5 将数据权限在前台修改及创建用户的页面添加输入框
这里需要在flask_appbuilter端修改
首先修改 flask_appbuilder/security/views.py 文件
找到 UserModelView等 与User有关的类
然后仿造email等字段添加comcode字段 即可。
class UserModelView(ModelView):
route_base = '/users'
list_title = lazy_gettext('List Users')
show_title = lazy_gettext('Show User')
add_title = lazy_gettext('Add User')
edit_title = lazy_gettext('Edit User')
label_columns = {'get_full_name': lazy_gettext('Full Name'),
'first_name': lazy_gettext('First Name'),
'last_name': lazy_gettext('Last Name'),
'username': lazy_gettext('User Name'),
'password': lazy_gettext('Password'),
'active': lazy_gettext('Is Active?'),
'email': lazy_gettext('EMail'),
'roles': lazy_gettext('Role'),
'comcode':lazy_gettext('机构权限'),
'last_login': lazy_gettext('Last login'),
'login_count': lazy_gettext('Login count'),
'fail_login_count': lazy_gettext('Failed login count'),
'created_on': lazy_gettext('Created on'),
'created_by': lazy_gettext('Created by'),
'changed_on': lazy_gettext('Changed on'),
'changed_by': lazy_gettext('Changed by')}
description_columns = {'first_name': lazy_gettext('Write the user first name or names'),
'last_name': lazy_gettext('Write the user last name'),
'username': lazy_gettext(
'Username valid for authentication on DB or LDAP, unused for OID auth'),
'password': lazy_gettext(
'Please use a good password policy, this application does not check this for you'),
'active': lazy_gettext('It\'s not a good policy to remove a user, just make it inactive'),
'email': lazy_gettext('The user\'s email, this will also be used for OID auth'),
'roles': lazy_gettext(
'The user role on the application, this will associate with a list of permissions'),
'comcode':lazy_gettext('机构权限,多机构以逗号单引号分开'),
'conf_password': lazy_gettext('Please rewrite the user\'s password to confirm')}
list_columns = ['first_name', 'last_name', 'username', 'email', 'active', 'roles','comcode']
show_fieldsets = [
(lazy_gettext('User info'),
{'fields': ['username', 'active', 'roles', 'login_count']}),
(lazy_gettext('Personal Info'),
{'fields': ['first_name', 'last_name', 'email'], 'expanded': True}),
(lazy_gettext('Audit Info'),
{'fields': ['last_login', 'fail_login_count', 'created_on',
'created_by', 'changed_on', 'changed_by'], 'expanded': False}),
]
user_show_fieldsets = [
(lazy_gettext('User info'),
{'fields': ['username', 'active', 'roles', 'login_count']}),
(lazy_gettext('Personal Info'),
{'fields': ['first_name', 'last_name', 'email'], 'expanded': True}),
]
search_exclude_columns = ['password']
add_columns = ['first_name', 'last_name', 'username', 'active', 'email', 'roles','comcode']
edit_columns = ['first_name', 'last_name', 'username', 'active', 'email', 'roles','comcode']
class UserDBModelView(UserModelView):
"""
View that add DB specifics to User view.
Override to implement your own custom view.
Then override userdbmodelview property on SecurityManager
"""
add_form_extra_fields = {'password': PasswordField(lazy_gettext('Password'),
description=lazy_gettext(
'Please use a good password policy, this application does not check this for you'),
validators=[validators.DataRequired()],
widget=BS3PasswordFieldWidget()),
'conf_password': PasswordField(lazy_gettext('Confirm Password'),
description=lazy_gettext(
'Please rewrite the user\'s password to confirm'),
validators=[EqualTo('password', message=lazy_gettext(
'Passwords must match'))],
widget=BS3PasswordFieldWidget())}
add_columns = ['first_name', 'last_name', 'username', 'active', 'email', 'roles','comcode', 'password', 'conf_password']