Skip to content

Instantly share code, notes, and snippets.

@d9k
Created January 13, 2022 07:44
Show Gist options
  • Save d9k/a638071ce7146ef01c27779a51d96f2b to your computer and use it in GitHub Desktop.
Save d9k/a638071ce7146ef01c27779a51d96f2b to your computer and use it in GitHub Desktop.
Superset welcome page redirect
import logging
import pprint
from flask import Flask, redirect
from flask_appbuilder import expose, IndexView
from superset.typing import FlaskResponse
logger = logging.getLogger()
logger.warn("Loading config override for Uniweb");
WELCOME_PAGE_REDIRECT_ADMIN="/superset/dashboard/1/"
WELCOME_PAGE_REDIRECT_DEFAULT="/dashboard/list/"
WELCOME_PAGE_REDIRECT_BY_ROLE={
'Test': '/superset/dashboard/2/',
}
# Change welcome page
# https://stackoverflow.com/a/69930056/1760643
class SupersetDashboardIndexView(IndexView):
@expose("/")
def index(self) -> FlaskResponse:
from superset.views.base import is_user_admin, get_user_roles
user_roles = get_user_roles()
logger.warn('__DEBUG__ user roles: ' + pprint.pformat(user_roles))
if is_user_admin():
return redirect(WELCOME_PAGE_REDIRECT_ADMIN)
else:
for role in user_roles:
role_name = role.name
if role_name in WELCOME_PAGE_REDIRECT_BY_ROLE:
return redirect(WELCOME_PAGE_REDIRECT_BY_ROLE[role_name])
return redirect(WELCOME_PAGE_REDIRECT_DEFAULT)
FAB_INDEX_VIEW = f"{SupersetDashboardIndexView.__module__}.{SupersetDashboardIndexView.__name__}"
@floriandeutsch89
Copy link

"Getting too many redirect errors" 4.1.1. version. Plz help

Works like this:

# redirect by user
import logging
import pprint
from flask import redirect, g, request
from flask_appbuilder import expose, IndexView

from superset import security_manager
from superset.extensions import appbuilder
from superset.utils.core import get_user_id
from superset.superset_typing import FlaskResponse

logger = logging.getLogger()

class SupersetIndexView(IndexView):
    @expose("/")
    def index(self) -> FlaskResponse:
        if not g.user or not get_user_id():
            # Steps for anonymous user
            return redirect("/login")

        # Steps for authenticated user
        user_roles = security_manager.get_user_roles()
        logger.warning('__DEBUG__ user roles: %s', pprint.pformat(user_roles))

        for role in user_roles:
            role_name = role.name
            #logger.warning('__DEBUG__ role: %s', pprint.pformat(role))

            if role_name == "CUSTOM_ROLE":
                return redirect("/dashboard/1")

        # Default redirect if no specific role matched
        return redirect("/dashboard/list")

FAB_INDEX_VIEW = f"{SupersetIndexView.__module__}.{SupersetIndexView.__name__}"

@joshfria
Copy link

Does this still work in version 5? I'm hesitant to upgrade because we need this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment