Apache Superset扩展User模型:自定义属性存储与Jinja宏问题
问题解决:Keycloak自定义属性存入Superset用户模型及Jinja宏传递参数
一、确保Keycloak自定义属性存入Superset数据库
你已经扩展了User模型并添加了custom_attribute字段,但登录时未存入,核心原因是Superset默认的用户信息转换逻辑不会处理自定义字段,需要做以下调整:
确认自定义模型与安全管理器的注册
在superset_config.py中必须添加这两行配置,确保Superset加载你的自定义实现:AUTH_USER_MODEL = CustomUser CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager重写
_user_info_to_user方法处理自定义字段
修改CustomSsoSecurityManager类,补充自定义属性的赋值逻辑——默认方法只会同步内置字段(用户名、邮箱等),重写后才能覆盖这个逻辑:class CustomSsoSecurityManager(SupersetSecurityManager): authoauthview = CustomSsoAuthOAuthView def oauth_user_info(self, provider, res=None): # 保留你原有的oauth_user_info代码... def _user_info_to_user(self, userinfo): # 先调用父类方法处理默认字段 user = super()._user_info_to_user(userinfo) # 将自定义属性映射到用户模型 if 'custom_attribute' in userinfo: user.custom_attribute = userinfo['custom_attribute'] return user验证Keycloak返回的字段正确性
确认Keycloak的userinfo端点确实返回customAttribute字段:- 登录Keycloak控制台,进入对应客户端的「客户端范围」,将自定义属性添加到「用户属性映射」,并设置为包含在
userinfo响应中。 - 可以直接调用Keycloak的
userinfo接口(如http://<keycloak地址>/realms/<你的领域>/protocol/openid-connect/userinfo),检查返回JSON中是否存在该字段。
- 登录Keycloak控制台,进入对应客户端的「客户端范围」,将自定义属性添加到「用户属性映射」,并设置为包含在
重启服务测试
修改配置后重启Superset,用目标Keycloak用户登录,查看ab_user表的custom_attribute字段是否已填充值。
二、自定义Jinja宏在SQL Lab传递customAttribute参数
可以通过扩展Superset的Jinja上下文实现,也可以封装成自定义宏,步骤如下:
注入自定义属性到Jinja上下文
在superset_config.py中定义上下文扩展函数,将当前用户的自定义属性加入Jinja环境:def jinja_context_extra(context): user = context.get('user') return { 'custom_attribute': getattr(user, 'custom_attribute', None) } JINJA_CONTEXT_ADDONS = jinja_context_extra自定义Jinja宏(可选)
若需要封装成可复用的宏,创建宏文件(比如superset/templates/jinja_macros/custom_macros.html):{% macro get_user_custom_attr() %} {{ custom_attribute if custom_attribute is not none else 0 }} {% endmacro %}然后在
superset_config.py中配置宏路径:JINJA_MACROS_PATH = ['superset/templates/jinja_macros']在SQL Lab中使用
- 直接使用变量:
SELECT * FROM your_table WHERE filter_col = {{ custom_attribute }} - 使用自定义宏:
SELECT * FROM your_table WHERE filter_col = {{ get_user_custom_attr() }}
- 直接使用变量:
内容的提问来源于stack exchange,提问作者StarkSlasher
相关产品推荐
相关产品推荐

