You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Superset 2.0.1嵌入仪表盘权限不符及GuestUser报错求助

Superset 2.0.1 嵌入仪表盘权限异常与GuestUser报错解决

问题概述

  1. 已创建自定义角色并分配权限给指定用户,直接登录Superset时权限正常生效,但嵌入仪表盘时,该用户在图表控件中仍拥有未分配的view query权限。
  2. 嵌入仪表盘时触发500内部错误,Superset日志提示'GuestUser' object has no attribute 'get_user_id'。

错误日志

Superset服务端日志

2023-02-13 16:31:00,516:ERROR:root:'GuestUser' object has no attribute 'get_user_id'
Traceback (most recent call last):
File "/home/ubuntu/Desktop/main_project/binary_superset_file/binary_ss_env/lib/python3.8/site-packages/flask_appbuilder/api/__init__.py", line 86, in wraps
return f(self, *args, **kwargs)
File "/home/ubuntu/Desktop/main_project/binary_superset_file/binary_ss_env/lib/python3.8/site-packages/superset/utils/log.py", line 245, in wrapper
value = f(*args, **kwargs)
File "/home/ubuntu/Desktop/main_project/binary_superset_file/binary_ss_env/lib/python3.8/site-packages/superset/dashboards/filter_state/api.py", line 98, in post
return super().post(pk)
File "/home/ubuntu/Desktop/main_project/binary_superset_file/binary_ss_env/lib/python3.8/site-packages/superset/views/base_api.py", line 83, in wraps
return f(self, *args, **kwargs)
File "/home/ubuntu/Desktop/main_project/binary_superset_file/binary_ss_env/lib/python3.8/site-packages/superset/temporary_cache/api.py", line 76, in post
key = self.get_create_command()(args).run()
File "/home/ubuntu/Desktop/main_project/binary_superset_file/binary_ss_env/lib/python3.8/site-packages/superset/temporary_cache/commands/create.py", line 35, in run
return self.create(self._cmd_params)
File "/home/ubuntu/Desktop/main_project/binary_superset_file/binary_ss_env/lib/python3.8/site-packages/superset/dashboards/filter_state/commands/create.py", line 41, in create
entry: Entry = {"owner": get_owner(actor), "value": value}
File "/home/ubuntu/Desktop/main_project/binary_superset_file/binary_ss_env/lib/python3.8/site-packages/superset/key_value/utils.py", line 70, in get_owner
return user.get_user_id() if not user.is_anonymous else None
AttributeError: 'GuestUser' object has no attribute 'get_user_id'
2023-02-13 16:31:00,533:INFO:werkzeug:127.0.0.1 - - [13/Feb/2023 16:31:00] "POST /api/v1/dashboard/11/filter_state?tab_id=1 HTTP/1.1" 500 -

浏览器控制台日志

POST http://127.0.0.1:8088/api/v1/dashboard/11/filter_state?tab_id=1 500 (INTERNAL SERVER ERROR)
Response {type: 'basic', url: 'http://127.0.0.1:8088/api/v1/dashboard/11/filter_state?tab_id=1', redirected: false, status: 500, ok: false, …}

解决方法

1. 修复GuestUser的get_user_id属性缺失问题

这是Superset 2.0.1的已知bug,GuestUser类未实现get_user_id方法,但过滤器状态API尝试调用该方法。可通过以下两种方式修复:

方式一:修改get_owner函数

编辑superset/key_value/utils.py文件,找到get_owner函数,修改为:

def get_owner(user: User) -> Optional[str]:
    """
    Get the owner identifier for a user.
    """
    if user.is_anonymous:
        return None
    # Handle GuestUser which doesn't have get_user_id
    return user.get_user_id() if hasattr(user, 'get_user_id') else None

方式二:给GuestUser类添加get_user_id方法

编辑superset/security/guest_user.py文件,在GuestUser类中添加方法:

def get_user_id(self) -> Optional[int]:
    return None

修改后重启Superset服务即可解决500错误。

2. 修复嵌入模式下权限异常问题

嵌入模式默认使用GuestUser身份,而非你分配权限的指定用户,导致权限不一致。可通过以下方式处理:

  • 启用JWT认证传递用户身份:配置Superset使用JWT认证,在嵌入链接中携带用户的JWT token,确保嵌入时使用指定用户的角色和权限,而非GuestUser。
  • 调整GuestUser权限:如果必须使用GuestUser,在Superset角色管理中修改Guest角色的权限,移除view query权限,确保嵌入时权限符合预期。
  • 检查PUBLIC_ROLE_LIKE_GUEST配置:在superset_config.py中确认PUBLIC_ROLE_LIKE_GUEST的设置,若设为True,公共角色会继承Guest角色权限,需根据需求调整。

内容的提问来源于stack exchange,提问作者Ceelamkoti Vinod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:25:47